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