当前位置:  开发笔记 > 编程语言 > 正文

.Net 2+:为什么if(1 == null)不再抛出编译器异常?

如何解决《.Net2+:为什么if(1==null)不再抛出编译器异常?》经验,为你挑选了0个好方法。

我用的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?.上面的语法是编译魔术.我们真的在做:

Nullable j = 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呢?

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有