CA1801:使用されていないパラメーターの確認

プロパティ
ルール ID CA1801
Title 使用されていないパラメーターの確認
[カテゴリ] 使用方法
修正が中断ありか中断なしか 中断なし - 変更に関係なく、メンバーがアセンブリの外部で参照されない場合。

中断なし - 本体内でパラメーターを使用するようにメンバーを変更した場合。

あり - パラメーターを削除するとアセンブリの外部から参照できるようになる場合。
.NET 8 では既定で有効 いいえ

原因

メソッドのシグネチャに、メソッドの本体で使用されていないパラメーターがあります。

この規則では、次の種類のメソッドは検証されません。

  • デリゲートによって参照されるメソッド。

  • イベント ハンドラーとして使用されるメソッド。

  • シリアル化コンストラクター (ガイドラインを参照してください)。

  • シリアル化 GetObjectData メソッド。

  • abstract (Visual Basic では MustOverride) 修飾子で宣言されたメソッド。

  • virtual (Visual Basic では Overridable) 修飾子で宣言されたメソッド。

  • override (Visual Basic では Overrides) 修飾子で宣言されたメソッド。

  • extern (Visual Basic では Declare ステートメント) 修飾子で宣言されたメソッド。

この規則では、__1_2 などの破棄シンボルを使用して名前が付けられたパラメーターは検出されません。 これにより、シグネチャ要件のために必要なパラメーターに対する警告のノイズが減少します。たとえば、デリゲートとして使用されるメソッド、特別な属性を持つパラメーター、または、フレームワークによって値が実行時に暗黙的にアクセスされるがコードでは参照されないパラメーターなどです。

注意

この規則は、IDE0060 を優先して非推奨になっています。 ビルド時に IDE0060 アナライザーを適用する方法の詳細については、「コード スタイルの分析」を参照してください。

規則の説明

メソッド本体で使用されていない非仮想メソッドのパラメーターを確認して、それらにアクセスしていないことに関連する不正確さが存在しないことを確認します。 未使用のパラメーターがあると、メンテナンスとパフォーマンスのコストが発生します。

この規則に違反すると、メソッドの実装のバグにつながる場合があります。 たとえば、メソッドの本体でパラメーターを使用するべきでした。 旧バージョンとの互換性のためにパラメーターが存在する必要がある場合は、この規則の警告を抑制します。

違反の修正方法

この規則違反を修正するには、使用されていないパラメーター (破壊的変更) を削除するか、メソッド本体でパラメーターを使用します (非破壊的変更)。

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

この規則による警告は抑制しても安全です。

  • 以前に発行されたコードの修正は破壊的変更になります。

  • Microsoft.VisualStudio.TestTools.UnitTesting.Assert のカスタム拡張メソッドの this パラメーター。 Assert クラスの関数は静的であるため、メソッド本体の this パラメーターにアクセスする必要はありません。

警告を抑制する

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

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

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

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

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

分析するコードを構成する

次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するか構成します。

このオプションを構成できる対象は、この規則だけ、それを適用するすべての規則、それを適用するこのカテゴリ (パフォーマンス) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。

特定の API サーフェイスを含める

ユーザー補助に基づいて、この規則を実行するコードベースの部分を構成できます。 たとえば、非パブリック API サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。

dotnet_code_quality.CAXXXX.api_surface = private, internal

既定では、CA1801 規則はすべての API サーフェイス (パブリック、内部、プライベート) に適用されます。

2 つのメソッドを次の例に示します。 1 つのメソッドが規則に違反し、もう一方のメソッドが規則を満たしています。

// This method violates the rule.
public static string GetSomething(int first, int second)
{
    return first.ToString(CultureInfo.InvariantCulture);
}

// This method satisfies the rule.
public static string GetSomethingElse(int first)
{
    return first.ToString(CultureInfo.InvariantCulture);
}