值
规则 ID
CA1066
类别
设计
修复是中断修复还是非中断修复
非中断
原因
值类型(结构)重写 Equals 方法,但不实现 IEquatable<T>。
规则说明
值类型重写 Equals 方法指示它可支持对类型的两个实例进行比较以确定二者的值是否相等。 请考虑实现 IEquatable<T> 接口以支持强类型相等性测试。 这可确保执行相等性检查的调用方调用强类型 System.IEquatable<T>.Equals 方法,避免对参数进行装箱,从而提高性能。 有关详细信息,请参阅此文。
System.IEquatable<T>.Equals 实现应返回与 Equals 一致的结果。
如何解决冲突
若要解决冲突,请实现 IEquatable<T> 并更新 Equals 重写,以调用此实现的方法。 例如,以下两个代码片段显示了规则冲突及其解决方法:
public struct S
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && _value == otherS._value;
}
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && Equals(otherS);
public bool Equals(S other)
=> _value == other._value;
}
何时禁止显示警告
如果实现接口的设计和性能优势并不重要,则可忽略此规则的冲突警告。
相关规则
CA1067:实现 IEquatable 时重写 Equals
另请参阅
设计规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。