CA1857: パラメーターには、最適なパフォーマンスを得るための定数が必要です

プロパティ
ルール ID CA1857
Title パラメーターには、最適なパフォーマンスを得るための定数が必要です
カテゴリ パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 警告として

原因

ConstantExpectedAttribute で注釈が付けられたパラメーターに無効な引数が渡されました。

規則の説明

この規則は、以下の操作を行ったコード内の場所にフラグを設定します。

違反の修正方法

受け取った特定のエラー メッセージで示されているように、コードを修正します。

例 1 (属性が必要)

次のコード スニペットは CA1857 の違反を示しています。

public interface I1<T>
{
    T M1(T operand1, [ConstantExpected] T operand2);
}

public class C1 : I1<int>
{
    public int M1(int operand1, int operand2) =>
        throw new NotImplementedException();
}

次のコード スニペットでは違反を修正しています。

public interface I1<T>
{
    T M1(T operand1, [ConstantExpected] T operand2);
}

public class C1 : I1<int>
{
    public int M1(int operand1, [ConstantExpected] int operand2) =>
        throw new NotImplementedException();
}

例 2 (非定数)

次のコード スニペットは CA1857 の違反を示しています。

static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }

次のコード スニペットでは違反を修正しています。

static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }

例 3 (無効な定数)

次のコード スニペットは CA1857 の違反を示しています。

static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }

次のコード スニペットでは違反を修正しています。

static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }

例 4 (範囲外の定数)

次のコード スニペットは CA1857 の違反を示しています。

static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }

次のコード スニペットでは違反を修正しています。

static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }

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

パフォーマンスが問題にならない場合は、この規則による警告を抑制しても問題ありません。

警告を抑制する

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

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

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

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

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