高效的 Linq Enumerable 的 'Count() == 1'测试
与此 问题 类似,但针对 Linq 进行了改写:
您可以使用 Enumerable
测试可枚举是否包含数据。但是,测试枚举是否包含单个值(即 Enumerable
Similar to this question but rephrased for Linq:
You can use Enumerable<T>.Any()
to test if the enumerable contains data. But what's the efficient way to test if the enumerable contains a single value (i.e. Enumerable<T>.Count() == 1
) or greater than a single value (i.e. Enumerable<T>.Count() > 1
) without using an expensive count operation?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
一种方法是编写一个新的扩展方法
One way is to write a new extension method
此代码采用了 LukeH 的出色答案,并将其包装为
IEnumerable
扩展,以便您的代码可以处理None
、One
和>许多
而不是0
、1
和2
。在静态类中,例如
EnumerableExtensions
:This code take's LukeH's excellent answer and wraps it up as an
IEnumerable
extension so that your code can deal in terms ofNone
,One
andMany
rather than0
,1
and2
.In a static class, e.g.
EnumerableExtensions
:另一种方式:
或者对于 1 个元素:
Another way:
Or for exactly 1 element:
高效的
Count() == n
测试:编辑,11 年后:
现在我可能会把它写成它
是已接受答案的通用版本。
Efficient
Count() == n
test:Edit, 11 years later:
Nowadays I'd probably write this as
It's a generalized version of the accepted answer.
对于对象的 linq,如果有多个元素,SingleOrDefault 就会抛出异常,因此如果您自己推出一个元素,情况可能会更好。
编辑:现在我已经看到了LukeH的答案,我不得不说我更喜欢它。真希望我自己也能想到这一点!
With linq to objects, SingleOrDefault throws if there is more than one element, so you're probably best off if you roll your own.
EDIT: Now I've seen LukeH's answer, and I have to say I prefer it. Wish I'd thought of it myself!
...如果类的值可以为空,这可能对我们有用。
...in case of class where values can be null this could maybe we useful.