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


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