CA1507: 文字列の代わりに nameof
を使用する
プロパティ | 値 |
---|---|
ルール ID | CA1507 |
Title | 文字列の代わりに nameof を使用する |
[カテゴリ] | 保守容易性 |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | 提案として |
原因
外側のメソッドのパラメーターの名前、または外側の型のプロパティの名前と一致する string
リテラルまたは定数が、メソッドの引数として使用されています。
規則の説明
規則 CA1507 では、メソッドまたはコンストラクターの引数として string
リテラルが使われており、nameof (Visual Basic では NameOf
) 式を使用することで保守性が向上するものにフラグを設定します。 この規則は、次のすべての条件が満たされた場合に発生します。
引数は
string
リテラルまたは定数です。引数は、呼び出されるメソッドまたはコンストラクターの
string
型のパラメーターに対応します (つまり、呼び出しサイトで変換は行われません)。次のいずれか:
パラメーターの宣言名が
paramName
で、string
リテラルの定数値が、メソッドまたはコンストラクターが呼び出されているメソッド、ラムダ、またはローカル関数のパラメーターの名前と一致します。パラメーターの宣言名が
propertyName
で、string
リテラルの定数値が、メソッドまたはコンストラクターが呼び出されている型のプロパティの名前と一致します。
規則 CA1507 を使用すると、将来、パラメーターの名前が変更されても、string
リテラルの名前が誤って変更されない場合に、コードの保守性が向上します。 nameof
を使用すると、リファクタリング操作によってパラメーターの名前が変更されたときにシンボルの名前が変更されます。 また、パラメーターの名前のスペルミスは、コンパイラによってキャッチされます。
違反の修正方法
違反を修正するには、string
リテラルを nameof (Visual Basic では NameOf
) 式で置き換えます。 たとえば、次の 2 つのコード スニペットは、規則違反とその修正方法を示しています。
public Book(string title)
{
// Violates rule CA1507
Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
// Resolves rule CA1507 violation
Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}
ヒント
Visual Studio では、この規則に対するコード修正を使用できます。 これを使用するには、string
リテラルにカーソルを置き、Ctrl+. (ピリオド) を押します。 表示されるオプションの一覧から、 [nameof を使用してシンボル名を表現する] を選択します。
どのようなときに警告を抑制するか
コードの保守性が懸念されない場合は、この規則違反を抑制しても問題ありません。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA1507.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
関連規則
関連項目
.NET