值
规则 ID
CA1067
类别
设计
修复是中断修复还是非中断修复
非中断
原因
类型实现 IEquatable<T>,但不实现 Equals。
规则说明
实现 IEquatable<T> 接口的类型指示它可支持对类型的两个实例进行比较以确定二者是否相等。 还应重写 Equals 和 GetHashCode() 方法的基类实现,以便其行为与 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();
}
何时禁止显示警告
请勿禁止显示此规则的冲突警告。
相关规则
CA1066:重写 Equals 时实现 IEquatable
另请参阅
设计规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。