Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 XXXX
CAXXXX
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