C# 如何";删除“;我的类的GetHashCode
我有一个结构,我想使用相等语法来比较它的实例。但我百分之百地肯定,我不会把它们放在散列结构中。正如建议的那样,无论何时重写相等,都需要重写GetHashCode。所以我的问题是如何告诉编译器在任何情况下我都不需要这个方法?就像C++11中的“=delete” 我不想重写,因为我真的不知道如何实现。我的结构中有一个双字段。在我的平等检查中,允许容忍。在这种情况下,我应该如何实现GetHashCodeC# 如何";删除“;我的类的GetHashCode,c#,hash,equality,C#,Hash,Equality,我有一个结构,我想使用相等语法来比较它的实例。但我百分之百地肯定,我不会把它们放在散列结构中。正如建议的那样,无论何时重写相等,都需要重写GetHashCode。所以我的问题是如何告诉编译器在任何情况下我都不需要这个方法?就像C++11中的“=delete” 我不想重写,因为我真的不知道如何实现。我的结构中有一个双字段。在我的平等检查中,允许容忍。在这种情况下,我应该如何实现GetHashCode 谢谢 GetHashCode是Object的公共虚拟方法,它是CLR系统中所有对象的根类。因此,不
谢谢
GetHashCode
是Object
的公共虚拟方法,它是CLR系统中所有对象的根类。因此,不,您不能“删除”该方法。如果您不希望用户调用它,您可以覆盖它,并抛出异常,但您不能按照您要求的方式“删除”它。对于可变引用类型,您应该仅在以下情况下覆盖:
- 您可以从不可变的字段计算哈希代码
- 当可变对象包含在依赖其哈希代码的集合中时,可以确保该对象的哈希代码不会更改
GetHashCode
方法,在处理多个字段时,生成has代码的一种方法是使用XOR
组合这些字段