Я хочу преобразовать из IEnumerable<Contact>
в List<Contact>
. Как я могу это сделать?
Преобразование из IEnumerable в список
Ответ 1
Вы можете сделать это очень просто, используя LINQ.
Убедитесь, что это использование находится в верхней части вашего файла С#:
using System.Linq;
Затем используйте ToList
метод расширения.
Пример:
IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
Ответ 2
Если вы работаете с обычным старым System.Collections.IEnumerable
вместо IEnumerable<T>
, вы можете использовать enumerable.Cast<object>().ToList()
Ответ 3
Если вы используете реализацию System.Collections.IEnumerable
, вы можете сделать следующее, чтобы преобразовать ее в List
. Следующее использует Enumerable.Cast метод преобразования 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
говорит, что значение не может быть нулевым.
IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();
Поэтому, как упоминалось в другом ответе, не забудьте сделать проверку null
, прежде чем преобразовать ее в List
.
Ответ 4
Я использую для этого метод расширения. Мой метод расширения сначала проверяет, является ли перечисление нулевым, и если это создает пустой список. Это позволяет вам делать foreach на нем, явно не проверяя нулевое значение.
Вот очень надуманный пример:
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();
}
Ответ 5
другой способ
List<int> list=new List<int>();
IEnumerable<int> enumerable =Enumerable.Range(1, 300);
foreach (var item in enumerable )
{
list.add(item);
}