我有一个匿名类的集合,我想返回一个空列表。
最佳可读表达式是什么?
我虽然如下,但我认为它们不够可读:
var result = MyCollection.Take(0).ToList();
var result = MyCollection.Where(p => false).ToList();
注意:我不想清空集合本身。
任何建议!
答案 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)
出于性能原因,您应该坚持使用您提出的第一个选项。
另一个会在返回空列表之前迭代整个集合。
因为匿名类型在源代码中无法创建列表。但是,有一种方法可以通过反思来创建这样的列表。