CA1066: IEquatable implementálása egyenlők felülírásakor
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1066 |
Cím | IEquatable implementálása egyenlők felül bírálásakor |
Kategória | Design |
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 | Nem |
Ok
Az értéktípus (struct) felülbírálja a metódust Equals , de nem implementálja IEquatable<T>.
Szabály leírása
Az értéktípus-felülírálási Equals módszer azt jelzi, hogy támogatja a típus két példányának összehasonlítását az értékegyenlőség érdekében. Fontolja meg az interfész implementálását, IEquatable<T> hogy támogassa a szigorúan gépelt teszteket az egyenlőség érdekében. Ez biztosítja, hogy az egyenlőségi ellenőrzéseket végző hívók meghívják az erősen beírt metódust System.IEquatable<T>.Equals , és elkerüljék az argumentumok bevitelét, javítva a teljesítményt. További információt itt talál.
Az System.IEquatable<T>.Equals implementációnak olyan eredményeket kell visszaadnia, amelyek összhangban vannak a következővel Equals: .
Szabálysértések kijavítása
A szabálysértés kijavításához hajtsa végre IEquatable<T> és frissítse Equals a felülbírálást a implementált metódus meghívásához. A következő két kódrészlet például a szabály megsértését és a hiba elhárítását mutatja be:
public struct S
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && _value == otherS._value;
}
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && Equals(otherS);
public bool Equals(S other)
=> _value == other._value;
}
Mikor kell letiltani a figyelmeztetéseket?
A szabály megsértését nyugodtan el lehet tiltani, ha a kialakítás és a teljesítmény szempontjából nem kritikus fontosságú a felület megvalósítása.
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 CA1066
// The code that's violating the rule is on this line.
#pragma warning restore CA1066
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.CA1066.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kapcsolódó szabályok
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: