.Any()
最近のインタビューで、との違いは何か、.Length > 0
また、コレクションに要素があるかどうかをテストするときに、なぜどちらかを使用するのかと質問されました。
これは少し戸惑いました。少し明白なことのように思えますが、何かを見落としているのではないかと感じました。
.Length
コレクションに要素があることを単に知る必要があり、.Any()
結果をフィルタリングしたい場合に使用することを提案しました。
.Any()
内部的にループ/クエリを実行する必要があるため、パフォーマンスも低下する可能性があります。
ベストアンサー1
Length
などの一部のコレクション タイプにのみ存在しますArray
。
Any
は、を実装する任意のコレクションで使用できる拡張メソッドですIEnumerable<T>
。
が存在する場合Length
はそれを使用でき、そうでない場合は を使用しますAny
。
おそらく、.Any() も内部でループ/クエリを実行する必要があるため、パフォーマンスが低下します。
Enumerable.Any
ループしません。イテレータをフェッチし、MoveNext
trueを返すかどうかを確認します。以下はソースコードです。.NET リフレクター。
public static bool Any<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
return true;
}
}
return false;
}