Я пытаюсь бросить IList
введите к List
введите, но я получаю ошибку каждый раз.
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
возвраты IList<SubProduct>
.
Другие ответы все рекомендуют использовать 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);
}
}
Если у Вас есть IList, содержащий интерфейсы, можно бросить его как это:
Список к IList
List<Foo> Foos = new List<Foo>();
IList<IFoo> IFoos = Foos.ToList<IFoo>();
IList для Списка
IList<IFoo> IFoos = new List<IFoo>();
List<Foo> Foos = new List<Foo>(IFoos.Select(x => (Foo)x));
Это принимает Foo
, имеет IFoo
соединенный интерфейсом.