如何获取集合的空列表?

时间:2011-04-19 10:12:43

标签: c# linq linq-to-objects

我有一个匿名类的集合,我想返回一个空列表。

最佳可读表达式是什么?

我虽然如下,但我认为它们不够可读:

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

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

注意:我不想清空集合本身。

任何建议!

4 个答案:

答案 0 :(得分:33)

关于:

Enumerable.Empty<T>();

这将返回一个类型为T的空枚举。如果你真的想要一个List,那么你可以自由地执行此操作:

Enumerable.Empty<T>().ToList<T>();

答案 1 :(得分:13)

实际上,如果你使用通用扩展,你甚至不需要使用任何Linq来实现这一点,你已经通过T公开了匿名类型

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

var emp = MyCollection.GetEmptyList();

答案 2 :(得分:10)

鉴于您的第一个建议有效且应该表现良好 - 如果可读性是唯一的问题,为什么不创建扩展方法:

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

现在你可以将你的例子重构为

var result = MyCollection.CreateEmptyCopy();

答案 3 :(得分:6)

出于性能原因,您应该坚持使用您提出的第一个选项。

另一个会在返回空列表之前迭代整个集合。

因为匿名类型在源代码中无法创建列表。但是,有一种方法可以通过反思来创建这样的列表。