首页 新闻 会员 周边

string.empty与“”问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-24 16:09

项目要求检查所有warning并改正,好多都是“变量已定义,但未使用”,但是当定义一个string并赋值为string.Empty的时候,并不会提示“变量未使用”,求高手解答一下我的疑惑,谢谢!

snowleopard_kevin的主页 snowleopard_kevin | 初学一级 | 园豆:178
提问于:2012-08-24 15:40
< >
分享
最佳答案
0

当你给一个 string 变量赋值 为 ""  时候是要分配内在空间的,因为"" 本身就是一个值。只不过大家习惯了用它来表示 字符串为空。

而 string.Empty() 是将 string 变量初始化为 null,而null 真正意义上的空值,它不会被分配内存空间。所以才有了,当你赋值为 "" 的时候会提示,因为它确实被赋值了,也确实没有被使用。

在日常开发中,建议赋值 为string.Empty()

收获园豆:10
jerry-Tom | 老鸟四级 |园豆:4077 | 2012-08-24 15:48

可是当我将string赋值为null的时候“string a = null;”,还是会提示“变量未使用”,那“string.Empty()”和“null”又有什么差别呢?

snowleopard_kevin | 园豆:178 (初学一级) | 2012-08-24 15:56

@snowleopard_kevin: 

当你只定义一个str而不为其分配内存时用string str=null,但是在接下来你使用它之前必须为它赋值如str=“xxxx”也就是为它初始化,不然程序运行时可能会引发空指针异常
而string str= string.Empty是定义和初始化放在了一起它实际是等价于
string str=null;str="";
具体使用时,如果你确定在使用前会给str赋值就用string str=null,否则用string str= string.Empty
用String.Empty表示空字符串,不要用””。String.Empty的定义为public static readonly string Empty,编译时会转化成””,但是String.Empty是一个常数,””是一个字符串对象,对字符串对象进行运算总是很慢的。

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-08-24 16:01

@百灵: 谢谢,明白了!

snowleopard_kevin | 园豆:178 (初学一级) | 2012-08-24 16:09
其他回答(1)
0

你把 =string.Empty 全部替换为空格,然后再编译。

Launcher | 园豆:45045 (高人七级) | 2012-08-24 15:55

你的意思是定义为“string a;”这样吗?

支持(0) 反对(1) snowleopard_kevin | 园豆:178 (初学一级) | 2012-08-24 15:58

@snowleopard_kevin: 不是,就是把赋值为 string.Empty 的代码修改为未赋值,你一编译,不就又能得到warning,然后就可以把这些warning都解决掉。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-08-24 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册