Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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 10'da 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 Equals yöntemlerinin temel sınıf uygulamalarını GetHashCode() geçersiz kılarak davranışlarının uygulamanınkiyle System.IEquatable<T>.Equals tutarlı olması gerekir. Daha fazla bilgi için bkz . Uygulayıcılara notlar.
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 Equals geçersiz kılın System.IEquatable<T>.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.