【发布时间】:2013-08-16 15:13:18
【问题描述】:
我只想知道 HashSet hs 是否为空。
我不想知道它到底包含多少元素。
所以我可以使用这个:
bool isEmpty = (hs.Count == 0);
...或者这个:
bool isEmpty = hs.Any(x=>true);
哪一个提供更好的结果,性能方面(特别是当 HashSet 包含大量元素时)?
【问题讨论】:
-
C# 哈希集维护一个计数,因此这比找出是否存在单个元素更有效。但是,如果您希望它是有条件的,那么 Any 总是会更好,因为它将在第一场比赛中停止。
-
您可以只使用
Any()而不是提供 lambda。 -
这是微优化问题,让您偏离真正的目标:编写更好的代码 :-) 使用您认为更清洁的任何内容。您还可以下载 .NET 反编译器(例如 ILSpy)并检查这两个实现。
Enumerable.Any可能会慢一点,因为它需要实例化一个枚举器。顺便说一句,您可能想要bool isEmpty = !hs.Any();
标签: c# .net performance hashset