CA1500: 変数名はフィールド名と同一にすることはできません

Item [値]
規則 ID CA1500
カテゴリ Microsoft.Maintainability
互換性に影響する変更点 フィールドと同じ名前を持つパラメーターで実行された場合は、次のようになります。

- 非破壊的 - 加えた変更に関係なく、パラメーターを宣言するフィールドとメソッドの両方がアセンブリの外部から参照できない場合。
- 破壊的 - フィールドの名前を変更し、アセンブリの外部から参照できる場合。
- 破壊的 - パラメーターの名前を変更し、それを宣言するメソッドがアセンブリの外部から参照できる場合。

フィールドと同じ名前を持つローカル変数で実行した場合は、次のようになります。

- 非破壊的 - 加えた変更に関係なく、フィールドがアセンブリの外部から参照できない場合。
- 非破壊的 - ローカル変数の名前を変更し、フィールドの名前を変更しない場合。
- 破壊的 - フィールドの名前を変更し、アセンブリの外部から参照できる場合。

原因

宣言する型のインスタンス フィールドと名前が一致するパラメーターまたはローカル変数が、インスタンス メソッドで宣言されています。 規則に違反するローカル変数を捕捉するには、テストされるアセンブリをデバッグ情報を使用してビルドし、関連付けられているプログラムのデータベース (.pdb) ファイルが使用できる必要があります。

規則の説明

インスタンス フィールドの名前がパラメーターまたはローカル変数の名前と一致する場合、そのインスタンス フィールドがメソッド本体の内部にあるときは、this (Visual Basic の Me) キーワードを使用してアクセスされます。 コードをメンテナンスするときは、この違いを忘れがちであり、パラメーター/ローカル変数がインスタンス フィールドを参照していることを前提として、エラーが発生します。 これは特にメソッド本体が長い場合に当てはまります。

違反の修正方法

この規則違反を修正するには、パラメーター/変数またはフィールドのいずれかの名前を変更します。

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

この規則による警告は抑制しないでください。

次の例に、2 つの規則違反を示します。

using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;
   
      void SomeMethodOne(int someField) {}
      
      void SomeMethodTwo()
      {
         int someField;
      }
   }
}