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 | CA1066 |
| Başlık | Equals’ı geçersiz kılarken IEquatable uygulayın |
| Kategori | Tasarım |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Bir değer türü (yapı) yöntemini geçersiz kılar Equals , ancak uygulamaz IEquatable<T>.
Kural açıklaması
Değer türü Equals yöntemini geçersiz kılıyorsa, bu türün iki örneğinin değer eşitliği açısından karşılaştırılmasını desteklediğini gösterir. Eşitlik için kesin tipte testleri desteklemek amacıyla IEquatable<T> arabirimini uygulamayı göz önünde bulundurun. Bu, eşitlik kontrolleri yapan çağrıcıların güçlü türdeş System.IEquatable<T>.Equals metodunu çağırmaları ve argümanı kutulama işlemini önleyerek performansın geliştirilmesini sağlar. Daha fazla bilgi için bkz . Uygulayıcılara notlar.
Uygulamanız System.IEquatable<T>.Equals ile Equalstutarlı sonuçlar döndürmelidir.
İhlalleri düzeltme
Bir ihlali düzeltmek için, IEquatable<T> uygulayın ve bu uygulanan yöntemi çağırmak için Equals geçersiz kılmasının güncellemesini yapın. Örneğin, aşağıdaki iki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:
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;
}
Uyarıların ne zaman bastırılması gerekiyor?
Arayüzün uygulanmasından elde edilen tasarım ve performans avantajları kritik değilse, bu kurala ait ihlalleri bastırmak güvenlidir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1066
// The code that's violating the rule is on this line.
#pragma warning restore CA1066
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1066.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.