C# 如何";删除“;我的类的GetHashCode

C# 如何";删除“;我的类的GetHashCode,c#,hash,equality,C#,Hash,Equality,我有一个结构,我想使用相等语法来比较它的实例。但我百分之百地肯定,我不会把它们放在散列结构中。正如建议的那样,无论何时重写相等,都需要重写GetHashCode。所以我的问题是如何告诉编译器在任何情况下我都不需要这个方法?就像C++11中的“=delete” 我不想重写,因为我真的不知道如何实现。我的结构中有一个双字段。在我的平等检查中,允许容忍。在这种情况下,我应该如何实现GetHashCode 谢谢 GetHashCode是Object的公共虚拟方法,它是CLR系统中所有对象的根类。因此,不

我有一个结构,我想使用相等语法来比较它的实例。但我百分之百地肯定,我不会把它们放在散列结构中。正如建议的那样,无论何时重写相等,都需要重写GetHashCode。所以我的问题是如何告诉编译器在任何情况下我都不需要这个方法?就像C++11中的“=delete”

我不想重写,因为我真的不知道如何实现。我的结构中有一个双字段。在我的平等检查中,允许容忍。在这种情况下,我应该如何实现GetHashCode


谢谢

GetHashCode
Object
的公共虚拟方法,它是CLR系统中所有对象的根类。因此,不,您不能“删除”该方法。如果您不希望用户调用它,您可以覆盖它,并抛出异常,但您不能按照您要求的方式“删除”它。

对于可变引用类型,您应该仅在以下情况下覆盖:

  • 您可以从不可变的字段计算哈希代码
  • 当可变对象包含在依赖其哈希代码的集合中时,可以确保该对象的哈希代码不会更改
否则,当对象存储在哈希表中时,不应修改该对象

为了实现自己的
GetHashCode
方法,在处理多个字段时,生成has代码的一种方法是使用
XOR
组合这些字段