前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1067:实现 IEquatable 时重写 Equals

CA1067:实现 IEquatable 时重写 Equals

作者头像
用户4268038
发布2022-01-11 10:45:11
2660
发布2022-01-11 10:45:11
举报
文章被收录于专栏:stcnb

规则 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档