Кастинг IEnumerable <T> для списка <T>

Зачем использовать автозагрузку PSR-0 или PSR-4 в композиторе, если карта классов на самом деле быстрее?

Потому что это более практично.

В производстве вы можете использовать карту классов (с composer dumpautoload -o), потому что вы не добавите новый класс, но в среде разработчиков интересно иметь гибкость, обеспечиваемую PSR-0 или PSR-4 (то есть ничего для делать при добавлении новых классов).

Обновление: вы также можете использовать composer install -o, это проще.

32
задан Dawid Ferenczy Rogožan 25 November 2019 в 20:56
поделиться

4 ответа

Как уже было предложено, используйте 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);
}
39
ответ дан 27 November 2019 в 20:11
поделиться

// с использованием System.Linq;

Используйте метод .ToList (). Найдено в пространстве имен System.Linq.

var yourList = yourEnumerable.ToList();

https://docs.microsoft.com/en-us/dotnet/api/system.linq?view=netcore-2.2

34
ответ дан 27 November 2019 в 20:11
поделиться

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

    IEnumerable<int> enumerable = GetIEnumerable<T>();
    List<int> list = new List<int>(enumerable);
1
ответ дан 27 November 2019 в 20:11
поделиться

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

List<int> intsList = enumIntList as List<int>;
0
ответ дан 27 November 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: