CA2011: Ne rendeljen hozzá tulajdonságot a setteren belül
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2011 |
Cím | Ne rendeljen hozzá tulajdonságot a beállításkezelőn belül |
Kategória | Megbízhatóság |
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árendelt egy értéket a saját készletéhez.
Szabály leírása
Ha egy tulajdonságot önmagához rendel a készlet tartozékában, az a készlet tartozékához tartozó rekurzív hívások végtelen láncához vezet. Ez futási időt eredményez StackOverflowException . Ilyen hiba akkor gyakori, ha a tulajdonság és a tulajdonság értékét tároló háttérmező hasonló nevű. Ahelyett, hogy az értéket a háttérmezőhöz rendelte volna, véletlenül hozzá lett rendelve magához a tulajdonsághoz.
Szabálysértések kijavítása
A szabálysértések kijavításához cserélje le a tulajdonságra vonatkozó szabálysértő hozzárendelést a háttérmezőhöz való hozzárendelésre, vagy váltson automatikus tulajdonság használatára. Az alábbi kódrészlet például a szabály megsértését és a kijavításának néhány módját mutatja be:
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; }
}
Mikor kell letiltani a figyelmeztetéseket?
Ha biztos benne, hogy a készlet tartozékának rekurzív hívásai feltételesen védve vannak a végtelen rekurzió megakadályozása érdekében, akkor érdemes letiltani a szabály megsértését.
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 CA2011
// The code that's violating the rule is on this line.
#pragma warning restore CA2011
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.CA2011.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kapcsolódó szabályok
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: