Udostępnij za pośrednictwem


CA2011: Nie przypisuj właściwości w jej ustawieniu

Właściwości Wartość
Identyfikator reguły CA2011
Tytuł Nie przypisuj właściwości w ramach jej metody ustawiającej
Kategoria Niezawodność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Właściwość została przypadkowo przypisana wartość w ramach własnego zestawu dostępu.

Opis reguły

Przypisanie właściwości do siebie w zestawie akcesoriów prowadzi do nieskończonego łańcucha cyklicznych wywołań do zestawu dostępu. Powoduje to wystąpienie w StackOverflowException czasie wykonywania. Taki błąd występuje często, gdy właściwość i pole zapasowe do przechowywania wartości właściwości mają podobne nazwy. Zamiast przypisywać wartość do pola zapasowego, została przypadkowo przypisana do samej właściwości.

Jak naprawić naruszenia

Aby naprawić naruszenia, zastąp naruszenie przypisania do właściwości przypisaniem do pola zapasowego lub przełącz się na użycie właściwości automatycznej. Na przykład poniższy fragment kodu przedstawia naruszenie reguły i kilka sposobów jego naprawy:

public class C
{
    // Backing field for property 'P'
    private int p;

    public int P
    {
        get
        {
            return p;
        }
        set
        {
            // CA2011: Accidentally assigned to property, instead of the backing field.
            P = value;
        }
    }
}
public class C
{
    // Backing field for property 'P'
    private int _p;

    public int P
    {
        get
        {
            return _p;
        }
        set
        {
            // Option 1: Assign to backing field and rename the backing field for clarity.
            _p = value;
        }
    }
}
public class C
{
    // Option 2: Use auto-property.
    public int P { get; set; }
}

Kiedy pomijać ostrzeżenia

Można pominąć naruszenia tej reguły, jeśli masz pewność, że rekursywne wywołania zestawu są warunkowo chronione, aby zapobiec nieskończonej rekursji.

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 CA2011
// The code that's violating the rule is on this line.
#pragma warning restore CA2011

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

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

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

Zobacz też