Condividi tramite


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

TypeName

VariableNamesShouldNotMatchFieldNames

CheckId

CA1500

Category

Microsoft.Maintainability

Breaking Change

In caso di generazione su un parametro che ha lo stesso nome di un campo:

  • Non sostanziale - Se il campo e il metodo che dichiara il parametro non sono visibili all'esterno dell'assembly, a prescindere dalle modifiche apportate.

  • Sostanziale: se si modifica il nome del campo ed è visibile all'esterno dell'assembly.

  • Sostanziale - Se si modifica il nome del parametro e il metodo che lo dichiara è visibile all'esterno dell'assembly.

In caso di generazione su una variabile locale che ha lo stesso nome di un campo:

  • Non sostanziale: se il campo non è visibile all'esterno dell'assembly, a prescindere dalle modifiche apportate.

  • Non sostanziale - Se si modifica il nome della variabile locale e non si modifica il nome del campo.

  • Sostanziale: se si modifica il nome del campo ed è visibile 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, l'assembly testato deve essere compilato con informazioni di debug e il file di database del programma associato (pdb) deve essere disponibile.

Descrizione della regola

Quando il nome di un campo di istanza corrisponde a un parametro o a un nome di variabile locale, al campo di istanza si accede utilizzando la parola chiave this (Me in Visual Basic) dall'interno del corpo del metodo.Quando si gestisce il codice, è facile dimenticare tale differenza e presupporre che il parametro o la variabile locale si riferisca a un campo di istanza, generando errori.in particolare per corpi di metodo di lunga durata.

Come correggere le violazioni

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

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito vengono illustrate due violazioni di questa regola.

Imports System

Namespace MaintainabilityLibrary

   Class MatchingNames

      Dim someField As Integer 

      Sub SomeMethodOne(someField As Integer)
      End Sub 

      Sub SomeMethodTwo()
         Dim someField As Integer 
      End Sub 

   End Class 

End Namespace
using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;

      void SomeMethodOne(int someField) {}

      void SomeMethodTwo()
      {
         int someField;
      }
   }
}