Привести IList к списку - PullRequest
       65

Привести IList к списку

57 голосов
/ 05 февраля 2010

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

List<SubProduct> subProducts= Model.subproduct;

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

Ответы [ 7 ]

112 голосов
/ 05 февраля 2010

Попробуйте

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

или

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
32 голосов
/ 05 февраля 2010

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

List<SubProduct> subProducts = Model.subproduct.ToList();
7 голосов
/ 17 декабря 2013

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

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
3 голосов
/ 05 февраля 2010
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;

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

0 голосов
/ 09 апреля 2019

Все остальные ответы рекомендуют использовать 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

А в C #:

public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
    foreach (var ele in ElementsToAdd)
    {
        Exttype.Add(ele);
    }
}
0 голосов
/ 27 октября 2017

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

object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();
0 голосов
/ 09 июня 2016
List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

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

...