hsHashSetが空であるかどうかを知りたいだけです。含まれる要素の数を正確に知ることには興味がありません。
だから私はこれを使うことができます:
bool isEmpty = (hs.Count == 0);
...またはこれ:
bool isEmpty = hs.Any(x=>true);
パフォーマンス面で (特に HashSet に多数の要素が含まれている場合)、どちらがより良い結果を提供しますか?
hsHashSetが空であるかどうかを知りたいだけです。含まれる要素の数を正確に知ることには興味がありません。
だから私はこれを使うことができます:
bool isEmpty = (hs.Count == 0);
...またはこれ:
bool isEmpty = hs.Any(x=>true);
パフォーマンス面で (特に HashSet に多数の要素が含まれている場合)、どちらがより良い結果を提供しますか?
HastSet<T>ICollection<T>これにはCountプロパティがあるため、 への呼び出しはCount()単に を呼び出しますHastSet<T>.Count。これは O(1) 操作であると想定しています (つまり、実際にはカウントする必要はありません- の現在のサイズを返すだけですHashSet)。
Any条件に一致するアイテムが見つかるまで繰り返し、その後停止します。
したがって、あなたの場合、1つのアイテムを反復して停止するだけなので、違いはおそらく無視できます。
適用したいフィルタx => x.IsValid(例: )Anyがある場合は、コレクション全体を反復処理するため、確実に高速になりますが、一致が見つかるとすぐに停止します。Count(x => x.IsValid)Any
これらの理由から、より直接的であり、潜在的なパフォーマンスの問題を回避できるため、私は一般的に を使用することを好みAny()ますCount()==0。よりもパフォーマンスが大幅にCount()==0向上した場合にのみ、に切り替えます。Any()
Any(x=>true)を呼び出すことと論理的に同じであることに注意してくださいAny()。それはあなたの質問を変えるものではありませんが、ラムダがなければきれいに見えます。