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


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