num < .Count() というコードを見かけたので書いてみた。
.Skip(num).Any() を勧める理由としては、
- .Count()ではIEnumerableの要素全体を辿るのに対し、.Skip(num)ではIEnumerableの要素をnum個だけ辿って終わる。
このとき、IEnumerableの要素数がnumより小さい場合でSkip(num) をしたとしても、IEnumerableの終端にたどり着いた時点でそれ以上は廻らないため無駄がない。
- .Count()を使う場合、IEnumerableの要素全体を廻る必要があるため無限シーケンスを扱えないが、.Skip(num).Any()なら無限シーケンスを扱える。
という点が挙げられます。念のため2つ書きましたが、両方とも同じことに対して言葉を変えて言っているだけなので、片方が頭にあれば問題ないです。
補足)
- Count(), Skip()もO(n)で、オーダーの視点から考えたらどちらでも問題はないので、無限シーケンスを扱うのでなければnum<.Count()でも良いと思います。(こっちのほうが視認性が良いという人もいるでしょうし)
- 当然、O(n)以下の計算量でIEnumerableの要素数を求められる場合は、そちらを使ったほうが良いです。