asp.net中DBNull.Value,null,String.Empty区别浅析
2013-08-14 00:00
417 查看
首先,“null”是C#中(VB.NET为Nothing),表示某个引用对象变量“未引用”任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出NullException之类的异常)。
String.Empty是一个静态的公共变量,表示某String变量不包含任何字符(等同于"")。不过从性能上说,用String.Empty比声明用一个""好一些――显然地,前者是String类的静态变量,无论如何使用只产生一个实例,后者用几次恐怕要产生几次了。
至于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.Empty不分配存储空间
""分配一个长度为空的存储空间
所以一般用string.Empty
为了以后跨平台,还是用string.empty
在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用。比如:
if语句成立
判定为空字符串的几种写法,按照性能从高到低的顺序是:
s.Length == 0 优于 s == string.Empty 优于 s == ""
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 == ""
相关文章推荐
- asp.net中DBNull.Value,null,String.Empty区别浅析
- Tip/Trick: ASP.NET 2.0 Deal with DBNull value when bind to RadioButtonList/当绑定RadioButtonL
- asp.net(C#)中的DBNull、Null、String.Empty等
- Tip/Trick: ASP.NET 2.0 Deal with DBNull value when bind to RadioButtonList/当绑定RadioButtonL
- asp.net 异常:Message="Value cannot be null.\r\nParameter name: g"
- asp.net中DBNull,Null,string.empty的异同
- ASP.NET报错——Master Page frameworkName: Value cannot be null error
- DBNull.Value,null,String.Empty之间的区别和联系
- (asp.net session总为null得到解决)了解IHttpModule接口事件执行顺便 获取Session 和SQL
- Asp.Net Textbox with jQuery UI Datepicker value lost on a postback
- 从Atlas到Microsoft ASP.NET AJAX(9) - Using the Value-add Scripts
- ASP.NET: Dynamically set Text and Value fields for
- Asp.Net中String.Empty、null和""的区别
- asp.net 4.0 A potentially dangerous Request.Form value was detected
- asp.net(c#)中String.Empty、NULL、"" 三者到底有啥区别和联系?
- 问题:调用 ASP.Net Core WebAPI的HTTP POST方法时,从 [FromBody] 中读取的 MongoDB GeoJsonObjectModel成员总是null
- 解决asp.net mvc UpdateModel更新对象后出现null问题的方法
- C#中ADO.NET连接数据库中的DbNull 与 null的区别
- asp.net不认为数据库字段的空值为null
- ASP.NET多线程下使用HttpContext.Current为null解决方案 2015-01-22 15:23 349人阅读 评论(0) 收藏