分享方式:


CA1067:實作 IEquatable 時覆寫 Equals

屬性
規則識別碼 CA1067
標題 實作 IEquatable 時覆寫 Equals
類別 設計
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 建議

原因

型別會實作 IEquatable<T>,但不會覆寫 Equals 方法。

檔案描述

實作 IEquatable<T> 介面的類型表示它支援比較型別的兩個實例是否相等。 您也應該覆寫 和 GetHashCode() 方法的 Equals 基類實作,使其行為與實 System.IEquatable<T>.Equals 作的行為一致。 詳細資訊請看這裡

您的 Equals 實作應該會傳回與 System.IEquatable<T>.Equals 實作一致的結果。

如何修正違規

若要修正違規,請叫用 實作來覆寫 Equals 並加以實作 System.IEquatable<T>.Equals 。 例如,下列兩個程式碼片段會顯示違反規則,以及如何修正它:

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();
}

隱藏警告的時機

請勿隱藏此規則的違規。

另請參閱