1. ホーム
  2. c#

[解決済み] Count プロパティと Count() メソッドの違い?

2023-02-03 06:10:28

質問

コレクションを使用しているとき、オブジェクトの数を取得するために2つの方法があります。 Count (プロパティ) と Count() (メソッド)の2種類があります。何が重要な違いなのか、どなたかご存知でしょうか?

間違っているかもしれませんが、私はいつも Count プロパティを使用します。 Count() メソッドがコレクションに対してある種のクエリを実行すると仮定しているからです。 Count は私が「取得」する前にすでに割り当てられている必要があります。しかし、これは推測です。私が間違っていた場合、パフォーマンスに影響が出るかどうかはわかりません。

編集: 好奇心で、それでは Count() はコレクションがNULLの場合、例外を投げるのでしょうか?というのも、私は間違いなく Count プロパティは単に0を返します。

どのように解決するのですか?

のソースを逆コンパイルする。 Count() 拡張メソッドのソースをデコンパイルすると、このメソッドはオブジェクトが ICollection (一般的かそうでないか) であるかどうかをテストし、もしそうなら単に基礎となる Count プロパティを返します。

ですから、もしあなたのコードが Count を呼び出す代わりに Count() を呼び出す代わりに、型チェックをバイパスすることができます。理論的なパフォーマンス上の利点ですが、私はそれが顕著なものであることを疑う

// System.Linq.Enumerable
public static int Count<TSource>(this IEnumerable<TSource> source)
{
    checked
    {
        if (source == null)
        {
            throw Error.ArgumentNull("source");
        }
        ICollection<TSource> collection = source as ICollection<TSource>;
        if (collection != null)
        {
            return collection.Count;
        }
        ICollection collection2 = source as ICollection;
        if (collection2 != null)
        {
            return collection2.Count;
        }
        int num = 0;
        using (IEnumerator<TSource> enumerator = source.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                num++;
            }
        }
        return num;
    }
}