Bagikan melalui


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 8 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.

Baca juga