CA2245: Non assegnare una proprietà a se stessa
Proprietà | valore |
---|---|
ID regola | CA2245 |
Title | Non assegnare una proprietà a se stessa |
Categoria | Utilizzo |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
Una proprietà è stata assegnata accidentalmente a se stessa.
Descrizione regola
Il compilatore C# genera un avviso CS1717: assegnazione eseguita alla stessa variabile. Si intendeva assegnare qualcos'altro? quando un campo, un simbolo di parametro o locale viene assegnato a se stesso. Un errore di questo tipo è comune quando un simbolo locale, parametro o campo ha un nome simile a un altro simbolo nell'ambito. Invece di usare simboli diversi sul lato sinistro e destro dell'assegnazione, lo stesso simbolo è stato usato su entrambi i lati. Ciò comporta un'assegnazione ridondante del valore a se stesso e in genere indica un bug funzionale.
L'assegnazione di una proprietà a se stessa è anche un bug funzionale simile per quasi tutti i casi reali. Tuttavia, in alcuni casi estremi, il recupero di un valore della proprietà può avere effetti collaterali e il nuovo valore della proprietà è diverso dal valore originale. In tal caso, l'assegnazione automatica della proprietà non è ridondante e non può essere rimossa. Ciò impedisce al compilatore di generare un CS1717
avviso per l'assegnazione automatica delle proprietà, senza introdurre una modifica che causa un'interruzione per questi casi.
La regola CA2245
mira a colmare questo divario. Segnala la violazione per l'assegnazione automatica delle proprietà per risolvere questi bug funzionali. Per il piccolo set di casi di angolo in cui l'assegnazione automatica delle proprietà è auspicabile, CA2245
le violazioni possono essere eliminate nell'origine con un commento di giustificazione appropriato.
Come correggere le violazioni
Per correggere le violazioni, utilizzare simboli diversi a sinistra e sul lato destro dell'assegnazione. Ad esempio, il frammento di codice seguente mostra una violazione della regola e come risolverlo:
public class C
{
private int p = 0;
public int P { get; private set; }
public void M(int p)
{
// CS1717: Accidentally assigned the parameter 'p' to itself.
p = p;
// CA2245: Accidentally assigned the property 'P' to itself.
P = P;
}
}
public class C
{
private int p = 0;
public int P { get; private set; }
public void M(int p)
{
// No violation, now the parameter is assigned to the field.
this.p = p;
// No violation, now the parameter is assigned to the property.
P = p;
}
}
Quando eliminare gli avvisi
È sicuro eliminare le violazioni da questa regola se il recupero di un valore della proprietà può avere effetti collaterali e il nuovo valore della proprietà è diverso dal valore originale. In tal caso, l'assegnazione automatica delle proprietà non è ridondante. È necessario aggiungere un commento di giustificazione all'eliminazione per documentare il comportamento previsto.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA2245.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Regole correlate
- CS1717: assegnazione effettuata alla stessa variabile; intendevi assegnare qualcos'altro?
- CA2011: Non assegnare la proprietà all'interno del setter
- CA2246: Non assegnare un simbolo e il relativo membro nella stessa istruzione