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
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

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

Kural açıklaması

Arayüzü uygulayan IEquatable<T> türü, türün iki örneğini eşit olup olmadığını karşılaştırmayı desteklediğini belirtir. Ayrıca, Equals ve GetHashCode() yöntemlerinin temel sınıf uygulamalarını geçersiz kılarak davranışlarının System.IEquatable<T>.Equals uygulamasıyla tutarlı olmasını sağlamalısınız. Daha fazla bilgi için bkz . Uygulayıcılara notlar.

Uygulamanızın Equals ile System.IEquatable<T>.Equals uygulamasıyla tutarlı sonuçlar döndürmesi gerekir.

İhlalleri düzeltme

Bir ihlali düzeltmek için Equals geçersiz kılın ve uygulamak için System.IEquatable<T>.Equals’i çağırı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.