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 romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Javaslatként
Alkalmazandó nyelvek C# és Visual Basic

Ok

Egy tulajdonság véletlenül hozzá lett rendelve önmagához.

Szabály leírása

A C#-fordító figyelmeztetést generál CS1717: Hozzárendelés ugyanahhoz a változóhoz; talán valami mást szándékozott hozzárendelni? amikor egy mező, helyi változó vagy paraméter saját magához van hozzárendelve. 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 önmagához való redundáns hozzárendeléséhez vezet, és általában funkcionális hibát jelez.

Egy tulajdonság önmagához rendelése is hasonló funkcionális hiba szinte minden valós életbeli esetben. Azonban egyes szélsőséges szélső esetekben a tulajdonság értékének beolvasása mellékhatásokkal járhat, és a tulajdonság új értéke eltérhet 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 saját magához rendelésére vonatkozóan anélkül, hogy módosításokat vezetne be, amelyek a kompatibilitást megszakítják 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 önmagának való értékadá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.

Lásd még