当在字典中用作键时,重写结构体的GetHashCode会导致装箱
本文关键字:GetHashCode 结构体 重写 字典 | 更新日期: 2023-09-27 17:54:28
通常,如果一个结构体实现了一个接口,将该结构体赋值给一个接口变量会导致装箱,例如:
interface IFoo {}
struct S : IFoo {}
S s = ...
IFoo f = s; // boxing here
然而也有例外。实现IEquatable<T>
并在字典中使用这样的结构体作为键,似乎不会导致装箱。那么问题是,如果我只是覆盖GetHashCode
而不实现IEquatable<T>
呢?它会不会属于某种特殊情况?
如果你不实现IEquatable<T>
,那么在调用Equals
时结构将被装箱。Equals
是一个虚方法,因此需要一个引用来获取相关的方法表。