CA2245: Ne rendeljen hozzá tulajdonságot önmagához
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2245 |
Cím | Ne rendeljen hozzá tulajdonságot önmagához |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
Egy tulajdonság véletlenül hozzá lett rendelve önmagához.
Szabály leírása
A C#-fordító egy figyelmeztetést hoz létre a CS1717: Hozzárendelés ugyanarra a változóra; azt jelentette, hogy valami mást szeretne hozzárendelni? ha egy mező, helyi vagy paraméterszimbólum van hozzárendelve önmagához. Ilyen hiba akkor gyakori, ha egy helyi, paraméter vagy mező szimbólum neve hasonló a hatókör egy másik szimbólumához. Ahelyett, hogy a feladat bal és jobb oldalán különböző szimbólumokat használtak, ugyanazt a szimbólumot használták mindkét oldalon. Ez az érték redundáns hozzárendeléséhez vezet, és általában funkcionális hibát jelez.
A tulajdonság önmagához való hozzárendelése is hasonló funkcionális hiba szinte minden valós esetben. Egyes szélsőséges sarkokban azonban a tulajdonságértékek beolvasása mellékhatásokat okozhat, és a tulajdonság új értéke eltér az eredeti értéktől. Ha igen, a tulajdonság önkiosztása nem redundáns, és nem távolítható el. Ez megakadályozza, hogy a fordító figyelmeztetést CS1717
generáljon a tulajdonság ön-hozzárendelésére vonatkozóan anélkül, hogy kompatibilitástörő módosítást vezet be ezekben az esetekben.
A szabály CA2245
célja, hogy kitöltse ezt a rést. A funkcióhibák kijavítása érdekében jelenti a tulajdonság önkiosztásának megsértését. Azokban a kis sarokesetekben, ahol a tulajdonság ön-hozzárendelése kívánatos, CA2245
a szabálysértéseket a forrásban el lehet tiltani egy megfelelő indoklási megjegyzéssel.
Szabálysértések kijavítása
A szabálysértések kijavításához használjon különböző szimbólumokat a feladat bal és jobb oldalán. Az alábbi kódrészlet például a szabály megsértését és a hiba elhárítását mutatja be:
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;
}
}
Mikor kell letiltani a figyelmeztetéseket?
Ha egy tulajdonságérték beolvasása mellékhatásokat okozhat, és a tulajdonság új értéke eltér az eredeti értéktől, nyugodtan letilthatja a szabály megsértését. Ha igen, a tulajdonság önkiosztása nem redundáns. A letiltáshoz hozzá kell adni egy indoklási megjegyzést, amely a várt viselkedést dokumentálja.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2245.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kapcsolódó szabályok
- CS1717: Hozzárendelés ugyanarra a változóra; Valami mást akart hozzárendelni?
- CA2011: Ne rendeljen hozzá tulajdonságot a setteren belül
- CA2246: Ne rendeljen hozzá szimbólumot és tagját ugyanabban az utasításban
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: