Я пытаюсь использовать тип IList
для типа List
, но каждый раз получаю ошибку.
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
возвращает IList<SubProduct>
.
Я пытаюсь использовать тип IList
для типа List
, но каждый раз получаю ошибку.
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
возвращает IList<SubProduct>
.
Try
List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);
или
List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
Как насчет этого:
List<SubProduct> subProducts = Model.subproduct.ToList();
В моем случае я должен был сделать это, потому что ни одно из предлагаемых решений не было доступно:
List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;
Неявное преобразование не выполняется, потому что List<>
реализует IList
, а не наоборот. Итак, вы можете сказать IList<T> foo = new List<T>()
, но не List<T> foo = (some IList-returning method or property)
.
List<ProjectResources> list = new List<ProjectResources>();
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();
Это преобразует объект IList в объект списка.
Все остальные ответы рекомендуют использовать 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);
}
}
Если у вас есть 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
.
Вы можете перебрать список, используя:
var item = Model.subproduct[index];
Это лучший вариант для создания/преобразования списка общего объекта в список строк.
object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();