CA1067: IEquatable を実装するときに Equals をオーバーライドします
プロパティ | 値 |
---|---|
ルール ID | CA1067 |
Title | IEquatable を実装するときに Equals をオーバーライドします |
[カテゴリ] | デザイン |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | 提案として |
原因
型では IEquatable<T> を実装していますが、Equals メソッドをオーバーライドしていません。
規則の説明
IEquatable<T> インターフェイスが実装されている型は、その型の 2 つのインスタンスの等価性の比較がサポートされていることを示しています。 また、Equals メソッドと GetHashCode() メソッドの基底クラスの実装をオーバーライドして、その動作が System.IEquatable<T>.Equals 実装の動作と一貫性を保つようにする必要があります。 詳細については、こちらを参照してください。
Equals の実装からは、System.IEquatable<T>.Equals の実装と一致する結果が返されなければなりません。
違反の修正方法
違反を修正するには、Equals をオーバーライドし、System.IEquatable<T>.Equals の実装を呼び出すことで実装します。 たとえば、次の 2 つのコード スニペットは、規則違反とその修正方法の例を示しています。
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();
}
どのようなときに警告を抑制するか
この規則の違反は抑制しないでください。
関連規則
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET