2010-02-05 1 views
42

Я пытаюсь использовать тип IList типа List, но я получаю ошибку каждый раз.Включите IList в список

List<SubProduct> subProducts= Model.subproduct; 

Model.subproduct возвращается IList<SubProduct>.

+9

Лучше всего запрограммировать интерфейс (IList) вместо импликации (списка). Это ненужный актерский состав, чтобы перейти в Список. Теперь вам нужно добавить обработку ошибок, если во время реализации реализация IList, которая не является List, вводит этот путь кода. –

+3

Да, но 'IList' не имеет того, что' List' имеет, например 'AddRange' –

ответ

87

Попробуйте

List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct); 

или

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>; 
+5

Это правильный ответ, но есть ли причина, по которой вы хотите иметь дело со списком вместо IList? В большинстве случаев использование IList - лучший выбор. –

+3

IList subProducts = Model.subproduct; –

+3

@KeithRousseau Я столкнулся с проблемой, когда вам нужно использовать метод AddRange(). – ScubaSteve

3
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct; 

Неявные failes преобразования, потому что List<> реализует IList, а не наоборот. Поэтому вы можете сказать IList<T> foo = new List<T>(), но не List<T> foo = (some IList-returning method or property).

+7

Просто незначительный nitpick: Список не происходит от IList, It * реализует * IList. Вывод слова подразумевает, что между этими двумя отношениями есть наследование. –

+0

К сожалению, это правильно. – Webleeuw

27

Как об этом:

List<SubProduct> subProducts = Model.subproduct.ToList(); 
+4

Это доступно, только если у вас есть доступ к расширениям, определенным в сборке 'System.Linq'. – Suncat2000

+1

Это должен быть принятый ответ. –

7

В моем случае я должен был сделать это, потому что ни один из предложенных решений не были доступны:

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList(); 
0
List<ProjectResources> list = new List<ProjectResources>();   
IList<ProjectResources> obj = `Your Data Will Be Here`; 
list = obj.ToList<ProjectResources>(); 

Это преобразует объект IList в объект списка.

-1

Это лучший вариант для преобразования/преобразования списка общего объекта в список строк.

object valueList; 
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList(); 
+0

valueList должен быть списком объекта – 2017-11-10 07:50:09

 Смежные вопросы

  • Нет связанных вопросов^_^