Aracılığıyla paylaş


CA1067: IEquatable'ı uygularken Eşittir'i geçersiz kılma

Özellik Değer
Kural Kimliği CA1067
Başlık IEquatable uygularken Equals’ı geçersiz kılın
Kategori Tasarım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Bir tür uygular IEquatable<T>, ancak yöntemini geçersiz kılmaz Equals .

Kural açıklaması

Arabirim uygulayan IEquatable<T> bir tür, türün iki örneğini eşitlik için karşılaştırmayı desteklediğini gösterir. Ayrıca ve GetHashCode() yöntemlerinin temel sınıf uygulamalarını Equals geçersiz kılarak davranışlarının uygulamanınkiyle System.IEquatable<T>.Equals tutarlı olması gerekir. Daha ayrıntılı bilgi için buraya bakın.

Uygulamanız Equals , uygulamayla System.IEquatable<T>.Equals tutarlı sonuçlar döndürmelidir.

İhlalleri düzeltme

Bir ihlali düzeltmek için, uygulamayı çağırarak System.IEquatable<T>.Equals geçersiz kılın Equals ve uygulayın. Örneğin, aşağıdaki iki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:

using System;

public struct S : IEquatable<S>
{
    private readonly int _value;
    public S(int f)
    {
        _value = f;
    }

    public bool Equals(S other)
        => _value == other._value;
}
using System;

public struct S : IEquatable<S>
{
    private readonly int _value;
    public S(int f)
    {
        _value = f;
    }

    public bool Equals(S other)
        => _value == other._value;

    public override bool Equals(object obj)
        => obj is S objS && Equals(objS);

    public override int GetHashCode()
        => _value.GetHashCode();
}

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuralın ihlallerini bastırmayın.

Ayrıca bkz.