Udostępnij za pośrednictwem


CA2245: Nie przypisuj właściwości do samej siebie

Właściwości Wartość
Identyfikator reguły CA2245
Tytuł Nie przypisuj właściwości do jej samej
Kategoria Użycie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Właściwość została przypadkowo przypisana do siebie.

Opis reguły

Kompilator języka C# generuje ostrzeżenie CS1717: Przypisanie do tej samej zmiennej; czy oznacza to przypisanie czegoś innego? gdy pole, lokalny lub symbol parametru jest przypisywany do siebie. Taki błąd występuje często, gdy symbol lokalny, parametr lub pole ma nazwę podobną do innego symbolu w zakresie. Zamiast używać różnych symboli po lewej i prawej stronie przypisania, ten sam symbol był używany po obu stronach. Prowadzi to do nadmiarowego przypisania wartości do samej siebie i zazwyczaj wskazuje usterkę funkcjonalną.

Przypisywanie właściwości do siebie jest również podobną funkcjonalną usterką dla prawie wszystkich rzeczywistych przypadków. Jednak w niektórych skrajnych przypadkach rogu pobieranie wartości właściwości może mieć skutki uboczne, a nowa wartość właściwości różni się od oryginalnej wartości. Jeśli tak, samodzielne przypisanie właściwości nie jest nadmiarowe i nie można go usunąć. Uniemożliwia to kompilatorowi wygenerowanie CS1717 ostrzeżenia dotyczącego samodzielnego przypisania właściwości bez wprowadzenia zmiany powodującej niezgodność w tych przypadkach.

Zasada CA2245 ma na celu wypełnienie tej luki. Zgłasza naruszenie właściwości samodzielne przypisanie, aby pomóc w naprawieniu tych usterek funkcjonalnych. W przypadku małego zestawu przypadków narożnych, w których samodzielne przypisanie właściwości jest pożądane, CA2245 naruszenia mogą być pomijane w źródle z odpowiednim komentarzem uzasadnienia.

Jak naprawić naruszenia

Aby naprawić naruszenia, użyj różnych symboli po lewej stronie i prawej strony przypisania. Na przykład poniższy fragment kodu przedstawia naruszenie reguły i sposób jego naprawy:

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;
    }
}

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć naruszenia tej reguły, jeśli pobieranie wartości właściwości może mieć skutki uboczne, a nowa wartość właściwości różni się od oryginalnej wartości. Jeśli tak, samodzielne przypisanie właściwości nie jest nadmiarowe. Komentarz uzasadnienia należy dodać do pomijania, aby udokumentować to zachowanie zgodnie z oczekiwaniami.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA2245.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też