CA1067: Mengganti Sama Dengan saat menerapkan IEquatable
Properti | Nilai |
---|---|
ID Aturan | CA1067 |
Judul | Mengesampingkan Sama dengan saat menerapkan IEquatable |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Jenis menerapkan IEquatable<T>, tetapi tidak mengganti metode Equals.
Deskripsi aturan
Antarmuka penerapan IEquatable<T> jenis menunjukkan bahwa antarmuka mendukung perbandingan dua instans jenis untuk kesetaraan. Anda juga harus mengambil alih implementasi Equals kelas dasar dan GetHashCode() metode sehingga perilakunya konsisten dengan System.IEquatable<T>.Equals implementasi. Lihat di sini untuk lebih jelasnya.
Implementasi Anda Equals harus mengembalikan hasil yang konsisten dengan System.IEquatable<T>.Equals implementasi.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, ambil alih Equals dan terapkan dengan memanggil System.IEquatable<T>.Equals implementasi. Misalnya, dua cuplikan kode berikut menunjukkan pelanggaran aturan dan cara memperbaikinya:
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();
}
Kapan harus menekan peringatan
Jangan menekan pelanggaran aturan ini.