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();
}
隱藏警告的時機
請勿隱藏此規則的違規。