测试IEnumerable <t>是否包含1个元素而不计算或使用Single </t>

时间:2011-09-16 16:36:56

标签: .net linq

如何找到我的列表中只包含一个且只有一个没有CountSingle的项目?

Efficient Linq Enumerable's 'Count() == 1' test

的可能欺骗

3 个答案:

答案 0 :(得分:26)

这个怎么样:

int limitedCount = myEnumerable.Take(2).Count();

那会给你:

  • 0,如果它是空的
  • 1,如果它只有1个元素
  • 2,如果它有2个或更多元素

...但它只给你那些答案,而只是迭代序列一次。然后,您可以打开结果。

答案 1 :(得分:2)

myEnumerable.Take(2).Count() < 2

答案 2 :(得分:-1)

而不是使用异常,循环遍历可枚举,一旦你击中超过1,就会突破它。

你不必全部计算它们......只有2个:)

此外,使用流量控制的例外是一个坏主意,因为从性能的角度来看, 确实 非常昂贵。


正如@Jon Skeet的回答所示,有更好的方法可以做到这一点,因为IEnumerable接口设计得非常好。但是,如果它没有.Skip.Any()方法(适用于其他语言或只是迭代的地方),则只需要数到2。