Бросок IList для списка

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

List<SubProduct> subProducts= Model.subproduct;

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

59
задан 17 December 2013 в 19:47

2 ответа

Другие ответы все рекомендуют использовать 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
ответ дан 1 November 2019 в 11:26

Если у Вас есть 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 соединенный интерфейсом.

0
ответ дан 1 November 2019 в 11:26

Другие вопросы по тегам:

Похожие вопросы: