次の方法で共有


CA1507: 文字列の代わりに nameof を使用する

プロパティ
ルール ID CA1507
Title 文字列の代わりに nameof を使用する
[カテゴリ] 保守容易性
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

外側のメソッドのパラメーターの名前、または外側の型のプロパティの名前と一致する 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 を使用してシンボル名を表現する] を選択します。

Code fix for CA1507 - use nameof to express symbol names

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

コードの保守性が懸念されない場合は、この規則違反を抑制しても問題ありません。

警告を抑制する

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

#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

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

関連項目