Преобразование из IEnumerable в List [дубликат]


этот вопрос уже есть ответ здесь:

  • Приведение IEnumerable к списку 5 ответов

Я хочу конвертировать из IEnumerable<Contact> до List<Contact>. Как я могу это сделать?

5 206

5 ответов:

вы можете сделать это очень просто с помощью LINQ.

убедитесь, что это находится в верхней части вашего файла c#:

using System.Linq;

затем использовать ToList метод расширения.

пример:

IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();

В случае, если вы работаете с обычным System.Collections.IEnumerable вместо IEnumerable<T> можно использовать enumerable.Cast<object>().ToList()

если вы используете реализацию System.Collections.IEnumerable вы можете сделать следующее, чтобы преобразовать его в List. Ниже используется перечисли.Бросок метод преобразования IEnumberable универсальный List.

//ArrayList Implements IEnumerable interface
ArrayList _provinces = new System.Collections.ArrayList();
_provinces.Add("Western");
_provinces.Add("Eastern");

List<string> provinces = _provinces.Cast<string>().ToList();

если вы используете общую версию IEnumerable<T> преобразование прямо вперед. Поскольку оба являются дженериками, вы можете сделать, как показано ниже,

IEnumerable<int> values = Enumerable.Range(1, 10);
List<int> valueList = values.ToList();

но если IEnumerable имеет значение null, когда вы пытаетесь преобразовать его в List, вы получите ArgumentNullException говоря значение не может быть null.

IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();

enter image description here

поэтому, как упоминалось в другого ответа забудь null проверьте перед преобразованием его в List.

Я использую метод расширения для этого. Мой метод расширения сначала проверяет, является ли перечисление нулевым, и если да, то создает пустой список. Это позволяет вам делать foreach на нем без явной проверки на null.

вот очень надуманный пример:

IEnumerable<string> stringEnumerable = null;
StringBuilder csv = new StringBuilder();
stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(","));

вот метод расширения:

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj)
{
    return obj == null ? new List<T>() : obj.ToList();
}

другой способ

List<int> list=new List<int>();

IEnumerable<int> enumerable =Enumerable.Range(1, 300);  

foreach (var item in enumerable )  
{     
  list.add(item);  
}