CA1067: Override Equals ketika menerapkan IEquatable

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.

Lihat juga