在C#中,如果我想使用Linq检查集合中是否有任何元素,我可以这样做:
someCollection.Any()
这优于
someCollection.Count() > 0
因为后者将计算集合中的所有项,所以当我不关心有多少项时,我只想知道是否有项。
有没有一个等价的方法来检查集合是否有多个项?类似于:
someCollection.Many()
而不是必须
someCollection.Count() > 1
我知道这是个愚蠢的问题,从我的研究来看,似乎没有。但由于这是我经常使用的东西,我想我应该向社区再核实一下。
谢谢
1条答案
按热度按时间kb5ga3dv1#
根据我的评论:
首先,应该检查
IEnumerable<T> source
* 实际上是IReadOnlyCollection<T>
还是ICollection<T>
,因为它有一个可以使用的.Count
属性-这比任何迭代都更可取。假设您的
IEnumerable<T>
没有O(1)
.Count
属性,如果您想查看是否有 * 至少 * 1个元素(即“* 至少2个或更多 *”),则使用source.Take(2).Count() == 2
或source.Skip(1).Any()
。就像这样:
如果你想提高效率,可以手动迭代:
如果您想 * 甚至 * 更有效率,请允许使用者提供非盒装枚举值(例如
List<T>.Enumerator
):这样使用:
list.GetEnumerator()
部分是必需的,因为它是将基于struct
的枚举器传递到泛型代码中而不进行装箱(至少,不进行反射)的唯一方法。