CA2245: Nepřiřazujte vlastnost sama sobě
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2245 |
Název | Nepřiřazujte vlastnost k ní samotné. |
Kategorie | Využití |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Vlastnost byla omylem přiřazena sama sobě.
Popis pravidla
Kompilátor jazyka C# vygeneruje upozornění CS1717: Přiřazení stejné proměnné; chtěli jste přiřadit něco jiného? Když je přiřazeno pole, místní symbol nebo symbol parametru. Taková chyba je běžná, když má místní symbol, parametr nebo symbol pole podobný jinému symbolu v oboru. Místo použití různých symbolů na levé a pravé straně zadání se na obou stranách použil stejný symbol. To vede k redundantnímu přiřazení hodnoty k sobě a obecně značí funkční chybu.
Přiřazení vlastnosti k sobě je také podobná funkční chyba pro téměř všechny reálné případy. V některých extrémních případech však načtení hodnoty vlastnosti může mít vedlejší účinky a nová hodnota vlastnosti se liší od původní hodnoty. Pokud ano, vlastní přiřazení vlastnosti není redundantní a nelze jej odebrat. Tím zabráníte kompilátoru CS1717
vygenerovat upozornění pro vlastní přiřazení vlastnosti, aniž byste v těchto případech zavedli zásadní změnu.
Cílem pravidla CA2245
je vyplnit tuto mezeru. Hlásí porušení pro vlastní přiřazení vlastností, které vám pomůžou tyto funkční chyby opravit. U malé sady rohových případů, kdy je žádoucí vlastní přiřazení vlastnosti, CA2245
lze porušení ve zdroji potlačit pomocí odpovídajícího komentáře k odůvodnění.
Jak opravit porušení
Pokud chcete opravit porušení, použijte různé symboly na levé straně a na pravé straně zadání. Například následující fragment kódu ukazuje porušení pravidla a jeho opravu:
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;
}
}
Kdy potlačit upozornění
Je bezpečné potlačit porušení tohoto pravidla, pokud načtení hodnoty vlastnosti může mít vedlejší účinky a nová hodnota vlastnosti se liší od původní hodnoty. Pokud ano, vlastní přiřazení vlastnosti není redundantní. Komentář k odůvodnění by se měl přidat do potlačení a dokumentovat ho podle očekávání.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA2245.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Související pravidla
- CS1717: Přiřazení provedené ke stejné proměnné; chtěla jste přiřadit něco jiného?
- CA2011: Nepřiřazovat vlastnost v rámci jeho setter
- CA2246: Nepřiřazujte symbol a jeho člena ve stejném příkazu