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 8 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.

Viz také