c ienumerable to list

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

Вы можете сделать это очень просто, используя LINQ.

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

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

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

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

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

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

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

Почему IEnumerable.ToList() не работает, если:

Примечание: _listRelealse будет null

Это не работает из-за этой строки:

Прежде всего, _listReleases на данный момент не является нулевым. Он просто пуст, что совсем другое.

Но объяснить, почему это не работает, как вы ожидаете: тип интерфейса IEnumerable фактически не выделяет или не резервирует хранилище для чего-либо. Он представляет объект, который можно использовать с циклом foreach , и не более того. На самом деле не нужно хранить элементы в самой коллекции.

Иногда ссылка IEnumerable имеет те элементы в одном и том же объекте, но это необязательно. Что здесь происходит. OrderBy() расширения OrderBy() создает только объект, который знает, как смотреть исходный список и возвращать элементы в определенном порядке. Но у этого нет хранения для этих предметов. Это все еще зависит от исходного источника данных.

Лучшим решением для этой ситуации является прекращение использования переменной _listReleases в этой точке, и вместо этого просто используйте переменную sortedItems . До тех пор, пока первый не собирается собирать гарабы, последний будет делать то, что вам нужно. Но если вы действительно хотите переменную _listReleases , вы можете сделать это следующим образом:

Теперь вернемся к IEnumerables. Есть несколько хороших преимуществ для этого свойства, поскольку они не требуют немедленного хранения самих элементов и просто абстрагируют возможность итерации по коллекции:

  • Lazy Evaluation — то, что работа, требуемая для производства этих предметов, не выполняется до тех пор, пока не будет вызвана (и часто это означает, что ее не нужно будет делать все, что значительно улучшает производительность).
  • Композиция — объект IEnumerable может быть изменен во время программы, чтобы вносить в файл новые правила. Это уменьшает сложность программы и улучшает поддержку, позволяя разбить сложный набор требований к сортировке или фильтрации в составные части. Это также упрощает сборку программы, где эти правила могут быть легко определены пользователем во время выполнения, а не заранее программистом во время компиляции.
  • Эффективность памяти. IEnumerable позволяет итерировать коллекции данных из таких источников, как база данных, таким образом, чтобы сохранить текущую запись в памяти в любой момент времени. Эта функция также может использоваться для создания неограниченных коллекций: наборов элементов, которые могут растягиваться до бесконечности. Вы можете построить IEnumerable с типом BigInteger для вычисления следующего штриха на бесконечность, если его попросят. Более того, вы можете использовать эту коллекцию полезным способом без сбоев или зависания программы, объединив ее с возможностью компоновки, чтобы программа узнала, когда остановиться.

Определение

Создает List из IEnumerable . Creates a List from an IEnumerable .

Параметры типа

Тип элементов source . The type of the elements of source .

Параметры

Интерфейс IEnumerable , на основе которого создается список List . The IEnumerable to create a List from.

Возвраты

Объект List , содержащий элементы из входной последовательности. A List that contains elements from the input sequence.

Исключения

Свойство source имеет значение null . source is null .

Примеры

В следующем примере кода показано использование ToList для принудительной оценки немедленного запроса и возврата List , содержащего результаты запроса. The following code example demonstrates how to use ToList to force immediate query evaluation and return a List that contains the query results.

Комментарии

Метод ToList (IEnumerable ) вызывает немедленное вычисление запроса и возвращает List , который содержит результаты запроса. The ToList (IEnumerable ) method forces immediate query evaluation and returns a List that contains the query results. Этот метод можно добавить в запрос, чтобы получить кэшированную копию результатов запроса. You can append this method to your query in order to obtain a cached copy of the query results.

ToArray имеет аналогичное поведение, но возвращает массив вместо List . ToArray has similar behavior but returns an array instead of a List .

Оцените статью