面接の質問: コレクションに要素があるかどうかをテストするための .Any() と if (.Length > 0) の比較 質問する

面接の質問: コレクションに要素があるかどうかをテストするための .Any() と if (.Length > 0) の比較 質問する

.Any()最近のインタビューで、との違いは何か、.Length > 0また、コレクションに要素があるかどうかをテストするときに、なぜどちらかを使用するのかと質問されました。

これは少し戸惑いました。少し明白なことのように思えますが、何かを見落としているのではないかと感じました。

.Lengthコレクションに要素があることを単に知る必要があり、.Any()結果をフィルタリングしたい場合に使用することを提案しました。

.Any()内部的にループ/クエリを実行する必要があるため、パフォーマンスも低下する可能性があります。

ベストアンサー1

Lengthなどの一部のコレクション タイプにのみ存在しますArray

Anyは、を実装する任意のコレクションで使用できる拡張メソッドですIEnumerable<T>

が存在する場合Lengthはそれを使用でき、そうでない場合は を使用しますAny


おそらく、.Any() も内部でループ/クエリを実行する必要があるため、パフォーマンスが低下します。

Enumerable.Anyループしません。イテレータをフェッチし、MoveNexttrueを返すかどうかを確認します。以下はソースコードです。.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;
}

おすすめ記事