Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA1067 |
| Judul | Override Equals saat menerapkan IEquatable |
| Kategori | Desain |
| Perbaikan bersifat merusak atau tidak merusak | Non-disruptif |
| Diaktifkan secara default di .NET 10 | Sebagai saran |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Jenis menerapkan IEquatable<T>, tetapi tidak mengganti metode Equals.
Deskripsi aturan
Sebuah tipe yang mengimplementasikan antarmuka IEquatable<T> menunjukkan bahwa ia mendukung perbandingan dua instans dari tipe tersebut untuk kesetaraan. Anda juga harus mengambil alih implementasi Equals kelas dasar dan GetHashCode() metode sehingga perilakunya konsisten dengan System.IEquatable<T>.Equals implementasi. Untuk informasi selengkapnya, lihat Catatan untuk pelaksana.
Implementasi Anda Equals harus mengembalikan hasil yang konsisten dengan implementasi dari System.IEquatable<T>.Equals.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, timpa Equals dan terapkan dengan memanggil implementasi dari System.IEquatable<T>.Equals. 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 mengabaikan pelanggaran aturan ini.