2009-06-07 4 views

ответ

26

Как уже говорилось, используйте 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); 
} 
+0

выкинет ли ошибка, если IEnumerable не пустой, но пустой? –

24

Используйте метод .ToList().

yourEnumerable.ToList(); 
+1

Если не доступна при использовании System.Linq отсутствует :). Это должно быть полностью принятым ответом ... – CodingYourLife

0

нет, вы должны скопировать, если вы уверены, что ссылка является ссылкой на список, вы можете конвертировать как этот

List<int> intsList = enumIntList as List<int>; 
+5

Если вы уверены, что это ссылка на список, вы должны использовать прямой бросок, чтобы он выдавал исключение, если вы ошибаетесь. Используйте «как», если вы считаете, что это может быть список , но вы не уверены, и не являются условиями ошибки. Затем проверьте, равен ли результат. –

+0

Возможно, добавьте 'if (intsList == null) intsList = новый Список (enumIntList);' если он * может быть «списком », уже есть, но есть случаи, когда это не так. – jerryjvl

1

Создать новый список и передать старый IEnumerable его инициализатору:

IEnumerable<int> enumerable = GetIEnumerable<T>(); 
    List<int> list = new List<int>(enumerable); 
+0

это тоже скопируйте список. –

+0

все равно должна быть копия. – Shimmy

3

Как и другие предложил, просто использовать метод ToList() на перечислимом объекте:

var myList = myEnumerable.ToList() 

Но, если ваш IEnumerable объект не имеет метода ToList() и вы получаете сообщение об ошибке, как следующее:

«IEnumerable» не содержит определение для «ToList»

вы, вероятно, отсутствует System.Linq пространство имен, поэтому просто добавьте его:

using System.Linq 
Смежные вопросы