CA1500: имена переменных не должны совпадать с именами полей

Товар Значение
Идентификатор правила CA1500
Категория Microsoft.Supportability
Критическое изменение При запуске параметра, имеющего то же имя, что и поле:

- Если поле и метод, объявляющие параметр, не могут быть замечены вне сборки, независимо от внесенных изменений.
— Критическое — если изменить имя поля и можно увидеть за пределами сборки.
— Критическое — если изменить имя параметра и метод, объявляющий его, можно увидеть за пределами сборки.

При запуске локальной переменной, которая имеет то же имя, что и поле:

— Если поле не удается увидеть за пределами сборки, независимо от внесенных изменений.
- Неразрывно. Если изменить имя локальной переменной и не изменить имя поля.
— Критическое — если изменить имя поля и его можно увидеть за пределами сборки.

Причина

Метод экземпляра объявляет параметр или локальную переменную, имя которой соответствует полю экземпляра декларающего типа. Чтобы поймать локальные переменные, которые нарушают правило, тестовая сборка должна быть создана с помощью сведений об отладке, а соответствующий файл базы данных программы (PDB) должен быть доступен.

Описание правила

Если имя поля экземпляра совпадает с параметром или именем локальной переменной, то поле экземпляра обращается с помощью thisMe ключевое слово (в Visual Basic) в тексте метода. При сохранении кода это различие легко забыть и предположить, что переменная параметра или локальной переменной ссылается на поле экземпляра, что приводит к ошибкам. Это верно, особенно для длинных тел метода.

Устранение нарушений

Чтобы устранить нарушение этого правила, переименуйте параметр или переменную или поле.

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере показаны два нарушения правила.

using System;

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