Megosztás a következőn keresztül:


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ó információk