有点奇怪的问题......
但是,任何人都可以给我一个理由,说明为什么这会是预期的行为?
这对我来说似乎很奇怪....
//Makes perfect sense
object o = null;
o.GetHashCode().Dump();
Run Code Online (Sandbox Code Playgroud)
NullReferenceException:未将对象引用设置为对象的实例.
//Seems very odd
int? i = null;
i.GetHashCode().Dump();
Run Code Online (Sandbox Code Playgroud)
0
这显然意味着:
int? zero = 0;
int? argh = null;
zero.GetHashCode() == argh.GetHashCode(); //true
Run Code Online (Sandbox Code Playgroud)
Chr*_*Fin 46
这里的重点是
int? i = null;
Run Code Online (Sandbox Code Playgroud)
不创建一个变量i,其是null,但(通过执行隐式转换)一个Nullable<int>不具有一个值的实例.
这意味着对象/实例不是null(并且Nullable<T>它实际上不是结构/值类型null),因此必须返回哈希代码.
这也记录在这里:
如果HasValue属性为true,则Value属性返回的对象的哈希码,如果HasValue属性为false,则返回零.
Joh*_*ica 14
int?实际上只是简写Nullable<int>,一个包装int类型的结构,以允许它为null.Nullable可以与任何值类型一起使用.
因为Nullable实际上是一个结构(它不能为null),所以它必须为哈希代码返回一些东西,通常它会返回值的哈希码(大概是为了尽可能透明到其中的值).当值为null时,硬编码默认返回0:
public override int GetHashCode() {
return hasValue ? value.GetHashCode() : 0;
}
Run Code Online (Sandbox Code Playgroud)
看到这里.
| 归档时间: |
|
| 查看次数: |
3225 次 |
| 最近记录: |