当前位置: 移动技术网 > IT编程>开发语言>.net > asp.net中DBNull.Value,null,String.Empty区别浅析

asp.net中DBNull.Value,null,String.Empty区别浅析

2017年12月12日  | 移动技术网IT编程  | 我要评论
首先,“null”是c#中(vb.net为nothing),表示某个引用对象变量“未引用”任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出nullexcep

首先,“null”是c#中(vb.net为nothing),表示某个引用对象变量“未引用”任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出nullexception之类的异常)。

string.empty是一个静态的公共变量,表示某string变量不包含任何字符(等同于"")。不过从性能上说,用string.empty比声明用一个""好一些——显然地,前者是string类的静态变量,无论如何使用只产生一个实例,后者用几次恐怕要产生几次了。

复制代码 代码如下:

string str="";

//“”:表示在栈中分配了数据引用存储区域,并在堆中创建了实际数据存储区域,并将引用地址赋给了变量,在堆中分配了一个长度为空的存储空间。

string str=string.empty;

//string.empty: 表示在栈中分配了数据引用存储区域,并在堆中创建了用于实际数据存储的区域,并将引用地址赋给了变量,但在堆中创建的存储空间未分配或未存储数据。


至于dbnull.value,也是一个静态属性。它唯独用于数据库(例如使用datareader读取数据的时候,又或者是datatable中某行某列数据的比较时候)的“空数值”比较。因为在sql中某个字段为null只是说明该字段“没有任何值”,并不是c#中“不存在引用”。因此注意这些问题:

1)如果用datareader执行executescalar,如果你不确定是否会获取数据,必须采用null进行判断(因为空引用);如果你确信读取至少一条数据,但是不确定是否数据为空,可以使用dbnull.value进行数值判断。

2)承接1,如果某条字段确信没有任何数据,等同于没有任何字符,等同于string.empty和"",因此完全可以用string.empty或者""进行判断(重要结论:dbnull.value=string.empty="")。

3)另外,如果对string类型的datacolumn进行赋值(譬如赋值为null),既便如此,实际上在datatable中不可能存一个null(为了和sql实际数值对应),会转化成string.empty或者是""。判断方法同“重要结论”。

简单地说:

string str ="";

给你一张白纸;

string str = null;

连白纸也没有。

string.empty就相当于""

一般用于字符串的初始化

比如:

复制代码 代码如下:

string a;

console.writeline(a);//这里会报错,因为没有初始化a


而下面不会报错:
复制代码 代码如下:

string a=string.empty;

console.writeline(a);


或者用于比较:
复制代码 代码如下:

if(a=="")

if(a==string.empty)


上面两句是一样的效果。

string.empty不分配存储空间

""分配一个长度为空的存储空间

所以一般用string.empty

为了以后跨平台,还是用string.empty

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

复制代码 代码如下:

string s = "";

string s2 = string.empty;

if (s == string.empty) {

//
}


if语句成立

判定为空字符串的几种写法,按照性能从高到低的顺序是:

s.length == 0 优于 s == string.empty 优于 s == ""

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网