空哈希集 - 计数与任何

And*_*ndy 5 .net c# performance hashset

我只想知道HashSet是否hs为空.我不想知道它包含多少元素.

所以我可以用这个:

bool isEmpty = (hs.Count == 0);
Run Code Online (Sandbox Code Playgroud)

...或这个:

bool isEmpty = hs.Any(x=>true);
Run Code Online (Sandbox Code Playgroud)

哪一个提供了更好的结果,性能方面(特别是当HashSet包含大量元素时)?

Tse*_*eng 11

在HashSet上,您可以使用两者,因为HashSet在内部管理计数.

但是,如果您的数据位于对象IEnumerable<T>IQueryable<T>对象中,result.Any()则优先使用result.Count()(两种Linq方法).

Linq .Count()将迭代整个Enumerable,.Any()只会查看Enumerable中是否存在任何对象.

更新: 只是小的补充:在你的情况下使用HashSet .Count可能是更好的,因为.Any()需要IEmumerator创建和返回这是一个小开销,如果你不打算在你的代码(foreachLinq等)的任何地方使用Enumerator .但我认为这将被视为"微优化".