Как получить пустой список коллекции? - PullRequest
7 голосов
/ 19 апреля 2011

У меня есть коллекция анонимных классов, и я хочу вернуть их пустой список.

Какое наилучшее читаемое выражение для использования?

Я думаю о следующем, но я не понимаюНе думаю, что они достаточно понятны:

var result = MyCollection.Take(0).ToList();

var result = MyCollection.Where(p => false).ToList();

Примечание: я не хочу очищать саму коллекцию.

Любое предложение!

Ответы [ 4 ]

34 голосов
/ 20 мая 2011

А как насчет:

Enumerable.Empty<T>();

Возвращает пустой перечисляемый тип T. Если вы действительно хотите List, вы можете это сделать:

Enumerable.Empty<T>().ToList<T>();
13 голосов
/ 19 апреля 2011

На самом деле, если вы используете универсальное расширение, вам даже не нужно использовать какой-либо Linq для достижения этого, у вас уже есть анонимный тип, доступный через T

public static IList<T> GetEmptyList<T>(this IEnumerable<T> source)
{
    return new List<T>();
}

var emp = MyCollection.GetEmptyList();
10 голосов
/ 19 апреля 2011

Учитывая, что ваше первое предложение работает и должно работать хорошо - если читаемость является единственной проблемой, почему бы не создать метод расширения:

public static IList<T> CreateEmptyCopy(this IEnumerable<T> source)
{
   return source.Take(0).ToList();
}

Теперь вы можете изменить свой пример на

var result = MyCollection.CreateEmptyCopy();
6 голосов
/ 19 апреля 2011

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

Другой будет перебирать всю коллекцию перед возвратом пустого списка.

Поскольку у анонимного типа в исходном коде нет способа создать список. Однако существует способ создать такой список с помощью отражения.

...