Преобразование из IEnumerable в List [дубликат]
этот вопрос уже есть ответ здесь:
- Приведение IEnumerable к списку 5 ответов
Я хочу конвертировать из IEnumerable<Contact>
до List<Contact>
. Как я могу это сделать?
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();
поэтому, как упоминалось в другого ответа забудь
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(); }