Мне было интересно, можно ли включить IEnumerable в список. Есть ли способ сделать это, кроме копирования каждого элемента в список?Литье IEnumerable <T> в список <T>
ответ
Как уже говорилось, используйте 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);
}
Используйте метод .ToList().
yourEnumerable.ToList();
Если не доступна при использовании System.Linq отсутствует :). Это должно быть полностью принятым ответом ... – CodingYourLife
нет, вы должны скопировать, если вы уверены, что ссылка является ссылкой на список, вы можете конвертировать как этот
List<int> intsList = enumIntList as List<int>;
Если вы уверены, что это ссылка на список, вы должны использовать прямой бросок, чтобы он выдавал исключение, если вы ошибаетесь. Используйте «как», если вы считаете, что это может быть список
Возможно, добавьте 'if (intsList == null) intsList = новый Список
Создать новый список и передать старый IEnumerable его инициализатору:
IEnumerable<int> enumerable = GetIEnumerable<T>();
List<int> list = new List<int>(enumerable);
это тоже скопируйте список. –
все равно должна быть копия. – Shimmy
Как и другие предложил, просто использовать метод ToList()
на перечислимом объекте:
var myList = myEnumerable.ToList()
Но, если ваш IEnumerable
объект не имеет метода ToList()
и вы получаете сообщение об ошибке, как следующее:
«IEnumerable» не содержит определение для «ToList»
вы, вероятно, отсутствует System.Linq
пространство имен, поэтому просто добавьте его:
using System.Linq
- 1. Force Renew TGT
- 2. Kerberos TGT Behavior
- 3. CAS: Расшифровка TGT
- 4. Как использовать выражение генератора CMake $ <TARGET_FILE: tgt>?
- 5. Невозможно установить свойство «TGT» нулевой
- 6. Как преобразовать Список <IEnumerable <ProductViewModel> в <IEnumerable <ProductViewModel >>?
- 7. Как GSSManager.createCredential получает ключ Kerberos и TGT?
- 8. Как защитить файл cookie CAS-сервера TGT?
- 9. Получение TGT с использованием принципала сервиса
- 10. Может ли CAS (Jasig) перезагрузить сервер TGT?
- 11. Как преобразовать IEnumerable <IEnumerable <T>> в список <string>?
- 12. Динамическое литье в IEnumerable <T> или T
- 13. Преобразование IEnumerable <X> в список <Y>
- 14. Как передать в список <IEnumerable <XElement>>
- 15. литье список <baseclass> к списку <DerivedClass>
- 16. Выберите IEnumerable <object> из IEnumerable <IEnumerable <object>> LINQ
- 17. Общего список <T>, как IEnumerable <object>
- 18. Mapper.Map <Task <IEnumerable <Address>>, Task <IEnumerable <AddressView>>()
- 19. Список кастингов <MyObject> to IEnumerable <MyInterface>
- 20. Список <int> to IEnumerable <IComparable>
- 21. LINQ error- не тайное IEnumerable <IEnumerable <object>> в IEnumerable <object>
- 22. IEnumerable <IEnumerable <T>> в IEnumerable <T> с помощью LINQ
- 23. Как преобразовать IEnumerable <IEnumerable <T>> в IEnumerable <T>
- 24. Преобразование IEnumerable <X> в IEnumerable <Y>
- 25. Как преобразовать IEnumerable <IEnumerable <IGrouping <int,string> >> в IEnumerable <IEnumerable <string>>
- 26. Список <int> присваиваемый от IEnumerable?
- 27. Список <T> и IEnumerable разницу
- 28. IEnumerable <> to IList <>
- 29. IEnumerable <IEnumerable <int>> - не дублировать IEnumerable <int> s
- 30. Сравнение en IEnumerable <T> to IEnumerable <IEnumerable <T>> эффективно
выкинет ли ошибка, если IEnumerable не пустой, но пустой? –