Подтвердить что ты не робот

Вставить IList в список

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

List<SubProduct> subProducts= Model.subproduct;

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

4b9b3361

Ответ 1

Try

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

или

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

Ответ 2

Как насчет этого:

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

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

Ответ 6

Все остальные ответы рекомендуют использовать AddRange с IList.

Более элегантное решение, позволяющее избежать приведения, заключается в реализации расширения IList для выполнения этой работы.

В VB.NET:

<Extension()>
Public Sub AddRange(Of T)(ByRef Exttype As IList(Of T), ElementsToAdd As IEnumerable(Of T))
   For Each ele In ElementsToAdd
      Exttype.Add(ele)
   Next
End Sub

И в С#:

public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
    foreach (var ele in ElementsToAdd)
    {
        Exttype.Add(ele);
    }
}

Ответ 7

Если у вас есть IList, содержащий интерфейсы, вы можете привести его следующим образом:

Список в IList

List<Foo> Foos = new List<Foo>(); 
IList<IFoo> IFoos = Foos.ToList<IFoo>();

IList to List

IList<IFoo> IFoos = new IList<IFoo>();
List<Foo> Foos = new List<Foo>(IFoos.Select(x => (Foo)x));

Предполагается, что Foo имеет интерфейс IFoo.

Ответ 8

Вы можете перебрать список, используя:

var item = Model.subproduct[index];

Ответ 9

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

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