空字符的三种形式比较

1、string.Empty和“”的区别

这两个都是表示空字符串。只不过""理论上重新开辟内存空间,而String.Empty指向一处。不过优化器会优化的!

string.Empty 不分配存储空间, "" 分配一个长度为空的存储空间,所以一般用string.Empty,为了以后跨平台,还是用string.empty

在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用。比如:

 

2、 判定为空字符串的几种写法,按照性能从高到低的顺序是:s.Length == 0 优于 s == string.Empty 优于 s == ""

 

评论中sunday提供的性能比较图,大家可以参考下(具体应用不清楚,仅供参考):

3、关于String.Empty和Null的区别:

当你只定义一个str而不为其分配内存时用string str=null,但是在接下来你使用它之前必须为它赋值如str=“xxxx”也就是为它初始化

而string str= string.Empty是定义和初始化放在了一起它实际是等价于string str=null;str="";

具体使用时,如果你确定在使用前会给str赋值就用string str=null,否则用string str= string.Empty,不然程序运行时可能会引发空指针异常

4、null和DBNull的区别

Null是.net中无效的对象引用。

DBNull是一个类。DBNull.Value是它唯一的实例它指数据库中数据为空(<NULL>)时,在.net中的值

null表示一个对象的指向无效,即该对象为空对象。

DBNull.Value表示一个对象在数据库中的值为空,或者说未初始化,DBNull.Value对象是指向有效的对象。

DBNull在DotNet是单独的一个类型 System.DBNull 。它只有一个值 DBNull.Value 。无法继承此类。DBNull 直接继承 Object ,所以 DBNull 不是 string , 不是 int , 也不是 DateTime 。。。

但是为什么 DBNull 可以表示数据库中的字符串,数字,或日期呢?原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。

对于 DataRow , 它的 row[column] 返回的值永远不为 null , 要么就是具体的为column 的类型的值 。要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException,但有可能抛下标越界的异常。

DBNull 实现了 IConvertible 。 但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。

你可以用Convert.IsDBNull来判断一个值是否DBNull。注意Convert.IsDBNull(null)是false,也就是说null跟DBNull.Value是不等的。

posted on 2017-07-10 14:24  梁苗苗  阅读(738)  评论(1)    收藏  举报

导航