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.