Преобразование из IEnumerable в List
Я хочу конвертировать из IEnumerable
в List
. Как я могу это сделать?
- Список привязок к DataGridView в WinForm
- Объединение двух списков в Haskell
- Является ли list :: size () действительно O (n)?
- Преобразование списка кадров данных в один фрейм данных
- Проверьте, содержит ли строка элемент из списка (строк)
- Как клонировать общий список в C #?
- ArrayList vs List в C #
- Получение исключения ConcurrentModificationException при удалении элемента из java.util.List во время итерации списка?
Вы можете сделать это очень просто с помощью LINQ.
Убедитесь, что это использование находится в верхней части вашего файла C #:
using System.Linq;
Затем используйте ToList
расширения ToList
.
Пример:
IEnumerable enumerable = Enumerable.Range(1, 300); List asList = enumerable.ToList();
Если вы работаете с обычным старым System.Collections.IEnumerable
а не с IEnumerable
вы можете использовать enumerable.Cast
Если вы используете реализацию System.Collections.IEnumerable
вы можете сделать следующее, чтобы преобразовать его в List
. В следующем IEnumberable
используется метод Enumerable.Cast для преобразования IEnumberable
в IEnumberable
List
.
//ArrayList Implements IEnumerable interface ArrayList _provinces = new System.Collections.ArrayList(); _provinces.Add("Western"); _provinces.Add("Eastern"); List provinces = _provinces.Cast ().ToList();
Если вы используете универсальную версию IEnumerable
, преобразование выполняется прямо. Поскольку оба являются дженериками, вы можете сделать это, как показано ниже,
IEnumerable values = Enumerable.Range(1, 10); List valueList = values.ToList();
Но если IEnumerable
имеет значение NULL, когда вы пытаетесь преобразовать его в List
, вы получите ArgumentNullException
говорящий, что значение не может быть нулевым.
IEnumerable values2 = null; List valueList2 = values2.ToList();
Поэтому, как упоминалось в другом ответе , не забудьте выполнить null
проверку перед преобразованием в List
.
Для этого я использую метод расширения. Мой метод расширения сначала проверяет, является ли перечисление нулевым, и если это создает пустой список. Это позволяет вам делать foreach на нем, явно не проверяя значение null.
Вот очень надуманный пример:
IEnumerable stringEnumerable = null; StringBuilder csv = new StringBuilder(); stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(","));
Вот способ расширения:
public static List ToNonNullList (this IEnumerable obj) { return obj == null ? new List () : obj.ToList(); }
другой путь
List list=new List (); IEnumerable enumerable =Enumerable.Range(1, 300); foreach (var item in enumerable ) { list.add(item); }