CA1500:变量名不应与字段名相同

“值”
RuleId CA1500
Category Microsoft.Maintainability
重大更改 当对与字段同名的参数触发时:

- 非中断性 - 无论进行何种更改,如果字段和声明参数的方法在程序集外部不可见,则为非中断性更改。
- 中断性 - 如果更改字段的名称,并且在程序集外部可见,则为中断性更改。
- 中断性 - 如果更改参数以及声明参数的方法的名称,并且在程序集外部可见,则为中断性更改。

当对与字段同名的局部变量触发时:

- 非中断性 - 无论进行何种更改,如果字段在程序集外部不可见,则为非中断性更改。
- 非中断性 - 如果更改局部变量的名称,而不更改字段的名称,则为非中断性更改。
- 中断性 - 如果更改字段的名称,并且在程序集外部可见,则为中断性更改。

原因

实例方法声明一个名称与声明类型的实例字段一致的参数或局部变量。 若要捕获违反规则的局部变量,必须使用调试信息生成测试的程序集,并且关联的程序数据库 (.pdb) 文件必须可用。

规则说明

当实例字段的名称与参数或局部变量名称一致时,通过在方法主体内部使用 this(在 Visual Basic 中为 Me)关键字来访问实例字段。 维护代码时,很容易忘记这种差异,并假设参数/局部变量引用实例字段,这会导致错误。 对于冗长的方法主体尤其如此。

如何解决冲突

若要解决此规则冲突,请重命名参数/变量或字段。

何时禁止显示警告

不禁止显示此规则发出的警告。

示例

下面的示例显示了两个规则冲突。

using System;

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