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


CA1046: Ne terhelje túl az operátort a referenciatípusoknál

Tulajdonság Érték
Szabályazonosító CA1046
Cím Ne terhelje túl az operátort a referenciatípusoknál
Kategória Tervezés
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 9-ben Nem

Ok

A nyilvános vagy beágyazott nyilvános referenciatípus túlterheli az egyenlőségi operátort.

Szabály leírása

Referenciatípusok esetén az egyenlőségi operátor alapértelmezett megvalósítása szinte mindig helyes. Alapértelmezés szerint két hivatkozás csak akkor egyenlő, ha ugyanarra az objektumra mutatnak.

Szabálysértések kijavítása

A szabály megsértésének kijavításához távolítsa el az egyenlőségi operátor végrehajtását.

Mikor kell letiltani a figyelmeztetéseket?

Biztonságosan letilthatja a szabály figyelmeztetését, ha a referenciatípus beépített értéktípusként viselkedik. Ha értelmes a típuspéldányok összeadása vagy kivonása, akkor valószínűleg megfelelő az egyenlőségi operátor megvalósítása és az előírás megsértésének elkerülése.

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 CA1046
// The code that's violating the rule is on this line.
#pragma warning restore CA1046

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.CA1046.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezt a beállítást konfigurálhatja csak ehhez a szabályhoz, az összes szabályhoz, vagy az ebben a kategóriában (Tervezés) szereplő összes szabályhoz, amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A api_surface beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Jegyzet

Cserélje le a XXXXCAXXXX részét a vonatkozó szabály azonosítójára.

1. példa

Az alábbi példa két hivatkozás összehasonlítása során az alapértelmezett viselkedést mutatja be.

public class MyReferenceType
{
    private int a, b;
    public MyReferenceType(int a, int b)
    {
        this.a = a;
        this.b = b;
    }

    public override string ToString()
    {
        return String.Format($"({a},{b})");
    }
}

2. példa

Az alábbi alkalmazás összehasonlít néhány hivatkozást.

public class ReferenceTypeEquality
{
    public static void Main1046()
    {
        MyReferenceType a = new MyReferenceType(2, 2);
        MyReferenceType b = new MyReferenceType(2, 2);
        MyReferenceType c = a;

        Console.WriteLine($"a = new {a} and b = new {b} are equal? {(a.Equals(b) ? "Yes" : "No")}");
        Console.WriteLine($"c and a are equal? {(c.Equals(a) ? "Yes" : "No")}");
        Console.WriteLine($"b and a are == ? {(b == a ? "Yes" : "No")}");
        Console.WriteLine($"c and a are == ? {(c == a ? "Yes" : "No")}");
    }
}

Ez a példa a következő kimenetet hozza létre:

a = new (2,2) and b = new (2,2) are equal? No
c and a are equal? Yes
b and a are == ? No
c and a are == ? Yes

Lásd még