Кастинг IEnumerable <T> для списка <T>
Мне было интересно, можно ли включить IEnumerable в список. Есть ли способ сделать это, кроме копирования каждого элемента в список?
Ответы
Ответ 1
Как уже было сказано, используйте yourEnumerable.ToList()
. Он перечисляет ваш IEnumerable
, сохраняя содержимое в новом List
. Вы не обязательно копируете существующий список, так как ваш IEnumerable
может генерировать элементы лениво.
Это то, что предлагают другие ответы, но более ясные. Здесь разборки, чтобы вы могли быть уверены:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
return new List<TSource>(source);
}
Ответ 2
//используя System.Linq;
Используйте метод .ToList(). Найдено в пространстве имен System.Linq.
var yourList = yourEnumerable.ToList();
https://docs.microsoft.com/en-us/dotnet/api/system.linq?view=netcore-2.2
Ответ 3
Как и другие, просто используйте метод ToList()
для перечислимого объекта:
var myList = myEnumerable.ToList()
Но если ваш объект IEnumerable
не имеет метода ToList()
, и вы получаете сообщение об ошибке, как показано ниже:
'IEnumerable' не содержит определения для 'ToList'
вам, вероятно, не хватает пространства имен System.Linq
, поэтому просто добавьте его:
using System.Linq
Ответ 4
Создайте новый список и передайте старый IEnumerable в его инициализатор:
IEnumerable<int> enumerable = GetIEnumerable<T>();
List<int> list = new List<int>(enumerable);
Ответ 5
нет, вы должны скопировать, если вы уверены, что ссылка является ссылкой на список, вы можете конвертировать как это
List<int> intsList = enumIntList as List<int>;