我用的int
是一个例子,但这适用于.Net中的任何值类型
在.Net 1中,以下内容会引发编译器异常:
int i = SomeFunctionThatReturnsInt(); if( i == null ) //compiler exception here
现在(在.Net 2或3.5中)异常已经消失.
我知道为什么会这样:
int? j = null; //nullable int if( i == j ) //this shouldn't throw an exception
问题是因为可以int?
为空,int
现在有一个隐式转换int?
.上面的语法是编译魔术.我们真的在做:
Nullablej = null; //nullable int //compiler is smart enough to do this if( (Nullable ) i == j) //and not this if( i == (int) j)
所以现在,当我们这样做时,i == null
我们得到:
if( (Nullable) i == null )
鉴于C#正在进行编译逻辑来计算这个,为什么在处理绝对值时,为什么它不能够聪明null
呢?