CA1829:Enumerable. Count メソッドではなく Length/Count プロパティを使用します

プロパティ
ルール ID CA1829
Title Enumerable. Count メソッドではなく Length/Count プロパティを使用します
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

Count LINQ メソッドが同等のより効率的な Length または Count プロパティをサポートする型で使用されました。

規則の説明

この規則では、同じデータをフェッチするための同等でより効率的な Length または Count プロパティを持つ型のコレクションでの Count LINQ メソッド呼び出しにフラグを付けます。 Length または Count プロパティでは、コレクションを列挙しないため、効率が向上します。

この規則では、Length プロパティを持つ以下のコレクション型での Count 呼び出しにフラグを付けます。

この規則では、Count プロパティを持つ以下のコレクション型での Count 呼び出しにフラグを付けます。

分析されるコレクション型は、今後、より多くのケースに対応できるように拡張される可能性があります。

違反の修正方法

違反を修正するには、Count メソッド呼び出しを Length または Count プロパティ アクセスの使用に置き換えます。 たとえば、次の 2 つのコード スニペットは、規則違反とその修正方法を示しています。

using System.Collections.Generic;
using System.Linq;

class C
{
    public int GetCount(int[] array)
        => array.Count();

    public int GetCount(ICollection<int> collection)
        => collection.Count();
}
using System.Collections.Generic;

class C
{
    public int GetCount(int[] array)
        => array.Length;

    public int GetCount(ICollection<int> collection)
        => collection.Count;
}

ヒント

Visual Studio では、この規則に対するコード修正を使用できます。 これを使用するには、違反にカーソルを置き、Ctrl+. (ピリオド) を押します。 表示されるオプションの一覧から、 [使用可能な場合は Count() ではなく Length/Count プロパティを使用します] を選択します。

Code fix for CA1829 - Use Length/Count property instead of Count() when available

どのようなときに警告を抑制するか

数を計算するための不要なコレクションの列挙によるパフォーマンスへの影響が懸念されない場合は、この規則違反を抑制しても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1829
// The code that's violating the rule is on this line.
#pragma warning restore CA1829

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1829.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

関連項目