2016-08-19 3 views
0

列挙に0,1または1+要素が含まれているかどうかを確認したいと思います。シーケンス全体を列挙するオーバーヘッドを避けたいので、Count()を避けたい。列挙に例外を投げずに複数の要素が含まれているかどうかを確認しますか?

LinqクエリSingleOrDefault()がこの目的のために使用できることは知っていますが、代わりに1+のケースで扱いにくい例外処理を追加します。

Count()を使わずに例外処理を行う方法はありますか?あなたには、いくつかの基準に一致する最初の要素を返したい場合は

+0

* *その後、シングルを使用しないでください、あなたはちょうど '使用することができますCount' –

+1

を使用すると、あなたは 'Single'または' SingleOrDefault'がスローされますと文句を言います例外。奇妙なことは、これらの2つのメソッドは、例外をスローしても、あなたがやりたいことを*実行しないということです。あなたはその質問が本当に何かを明確にすることができますか?最初の要素を取得したいのですが、要素が1つ、2つ以上あるかどうかを確認しますか? –

+0

あなたはそれが*複数*の要素が含まれているかどうか尋ねる' First' –

答えて

4

一つのアプローチを使用する必要がありますこの:

if (mySequence.Take(2).Count() == 2) { 
    ... // Sequence has at least two elements 
} 

Take(2)限界がそうCount()を使用して、2せいぜいにカウントはmySequence.Count() > 1ほど高価ではありません。

最初の要素を取得する必要がある場合は、結果をTakeのリストに格納して、シーケンスの繰り返しを繰り返さないようにします。

0

、あなたはシーケンスは複数の要素を持っているようTakeCountを使用するかどうかを確認するためにFirstFirstOrDefault、ないSingle

2
.ElementatOrdefault(1) != null 
+0

良いですが、Take(n).Count()は列挙処理/オーバーヘッドに大きな違いはなく、少しはっきりしていると思います。 –

2

skipとanyを使用できます。

list.Skip(n).Any(); 
+0

良いですが、Take(n).Count()は列挙処理/オーバーヘッドに大きな違いはなく、少し明確です。 –

関連する問題