首页新闻找找看学习计划

请教C#基础问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-07-07 10:49

string s;

string s=null;

从IL代码看下面多了个ldnull,谁能说说这两句代码有啥区别吗?

c#
happydaily的主页 happydaily | 小虾三级 | 园豆:544
提问于:2013-07-06 20:54
< >
分享
最佳答案
1

s指向空地址,s =  null指向到ldnull地址。前者根本不存在,并且不能够直接的调用,后者可以调用,但是对象是空的。

收获园豆:10
````` | 专家六级 |园豆:14268 | 2013-07-06 21:42

第一个中,s的值也是null

dudu | 园豆:39109 (高人七级) | 2013-07-06 21:45

@dudu: 值是null,也是string的默认值,但是此null不同于null,前者不会做任何处理,所以结果也就是不通过再次赋值不能够被调用。而后者直接为空,可以直接调用,只是抛出的异常是未将对象引用实例。

````` | 园豆:14268 (专家六级) | 2013-07-06 21:56

@imfunny: 你是对的,不赋值null,编译不通过

dudu | 园豆:39109 (高人七级) | 2013-07-06 22:13
其他回答(1)
0

OpCodes.Ldnull 表示将空引用推送到堆栈上,详见MSDN

第一个表示声明string类型的变量s,s的值是string类型的默认值。

第二个表示声明string类型的变量s,并给s分配null值。

第二个方法多了一次“将空引用推送到堆栈上”的操作。

收获园豆:10
dudu | 园豆:39109 (高人七级) | 2013-07-06 21:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册