如何在C#派生类中使用元组实现GetHashCode方法?
你只需要把基类的GetHashCode()返回值作为元组的一个元素传入即可,无需手动处理哈希组合逻辑,示例实现如下:
class Derived : Base { public int Prop3 { get; set; } public int Prop4 { get; set; } public override int GetHashCode() => (base.GetHashCode(), Prop3, Prop4).GetHashCode(); }
ValueTuple的内置GetHashCode()方法已经封装了多字段哈希值的组合计算逻辑,内部自动处理了整数溢出场景,因此你不需要额外添加unchecked块,也不需要自定义哈希常量,写法和基类的实现风格完全统一。
注意事项
如果你的类型同时重写了Equals方法,需要保证GetHashCode计算时纳入的字段和Equals中判断相等性的字段完全一致,避免出现两个对象Equals判断为真但哈希值不同的问题。
如果是.NET Core 2.1 / .NET Framework 4.7.1 及以上版本的项目,你也可以选择用官方提供的哈希组合工具类实现,写法同样简洁:
public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), Prop3, Prop4);
内容的提问来源于stack exchange,提问作者UnionP
相关产品推荐
相关产品推荐

