CA1500: I nomi delle variabili non devono corrispondere ai nomi dei campi

Articolo Valore
ID regola CA1500
Category Microsoft.Maintainability
Modifica Quando viene generato su un parametro con lo stesso nome di un campo:

- Non di rilievo: se sia il campo che il metodo che dichiara il parametro non possono essere visualizzati all'esterno dell'assembly, indipendentemente dalla modifica apportata.
- Interruzione: se si modifica il nome del campo e si può vedere all'esterno dell'assembly.
- Interruzione: se si modifica il nome del parametro e il metodo che lo dichiara può essere visualizzato all'esterno dell'assembly.

Quando viene generato in una variabile locale con lo stesso nome di un campo:

- Non di rilievo: se il campo non può essere visualizzato all'esterno dell'assembly, indipendentemente dalla modifica apportata.
- Non di rilievo: se si modifica il nome della variabile locale e non si modifica il nome del campo.
- Interruzione: se si modifica il nome del campo e può essere visualizzato all'esterno dell'assembly.

Causa

Un metodo di istanza dichiara un parametro o una variabile locale il cui nome corrisponde a un campo di istanza del tipo dichiarante. Per intercettare le variabili locali che violano la regola, è necessario compilare l'assembly testato usando le informazioni di debug e il file di database del programma associato (con estensione pdb) deve essere disponibile.

Descrizione regola

Quando il nome di un campo dell'istanza corrisponde a un parametro o a un nome di variabile locale, si accede al campo dell'istanza usando la this parola chiave (Me in Visual Basic) quando si trova all'interno del corpo del metodo. Quando si gestisce il codice, è facile dimenticare questa differenza e presupporre che il parametro/variabile locale faccia riferimento al campo dell'istanza, che causa errori. Questo vale soprattutto per i corpi lunghi del metodo.

Come correggere le violazioni

Per correggere una violazione di questa regola, rinominare il parametro/variabile o il campo.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio seguente vengono illustrate due violazioni della regola.

using System;

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