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.
Powiązane reguły
- CS1717: Przypisanie wykonane do tej samej zmiennej; czy masz na myśli przypisanie czegoś innego?
- CA2011: Nie przypisuj właściwości w jej ustawieniu
- CA2246: Nie przypisuj symbolu i jego elementu członkowskiego w tej samej instrukcji