C#中的DBNull、Null、String.Empty和“”
null可賦值任何變量,將變量置為空?
DBNull只用于DataRow對(duì)象,表示數(shù)據(jù)庫(kù)中的空值?
String.Empty是0長(zhǎng)度字串?
Convert.IsDBNull判斷是否為DBNull
?
DBNull.Value與Null的區(qū)別
Null是.net中無(wú)效的對(duì)象引用。
DBNull是一個(gè)類。DBNull.Value是它唯一的實(shí)例。它指數(shù)據(jù)庫(kù)中數(shù)據(jù)為空(<NULL>)時(shí),在.net中的值。
以下是我測(cè)試的一個(gè)例子。
例:表tbl_Student
id????name????address
1????? jim????? <NULL>
將上述表數(shù)據(jù)填充到.net 的名為dt的DataTable中。
dt.Rows[0]["address"]不等于null但是等于DBNull.Value.
可見(jiàn)null表示一個(gè)對(duì)象的指向無(wú)效,即該對(duì)象為空對(duì)象。
DBNull.Value表示一個(gè)對(duì)象在數(shù)據(jù)庫(kù)中的值為空,或者說(shuō)未初始化,DBNull.Value對(duì)象是指向有效的對(duì)象。
另外注:對(duì)上述dt,如果有如下代碼:dt.Rows[0][100]。結(jié)果如何?
并非想象中的null。而是出現(xiàn)異常:索引超出數(shù)組界限。
對(duì)于普通的引用類型變量,如果指向?qū)ο鬄閚ull,則會(huì)提示:未將對(duì)象引用設(shè)置到對(duì)象實(shí)例。但對(duì)于使用dt.Rows[i][j]取值,如果第i行存在但i行沒(méi)有j列,則直接出現(xiàn)異常,不會(huì)返回一個(gè)指向null的dt.Rows[i][j]。
所以:使用(dt.Rows[0][100]!=null)判斷沒(méi)有意義。為避免0行的100列不存在。可以判斷(dt.Rows[0].ItemArray.Length>100).
string.Empty不分配存儲(chǔ)空間
????? ""分配一個(gè)長(zhǎng)度為空的存儲(chǔ)空間???
????? 所以一般用string.Empty
為了以后跨平臺(tái),還是用string.empty
在 C# 中,大多數(shù)情況下 "" 和 string.Empty 可以互換使用。比如:
string s = "";
string s2 = string.Empty;
if (s == string.Empty)?{
?
判定為空字符串的幾種寫法,按照性能從高到低的順序是:
s.Length == 0????? 優(yōu)于 s == string.Empty????? 優(yōu)于 s == ""
您關(guān)于String.Empty和Null的問(wèn)題是這樣的,這兩個(gè)都是表示空字符串,其中有一個(gè)重點(diǎn)是string str1= String.Empty和 string str2=null 的區(qū)別,這樣定義后,str1是一個(gè)空字符串,空字符串是一個(gè)特殊的字符串,只不過(guò)這個(gè)字符串的值為空,在內(nèi)存中是有準(zhǔn)確的指向的,string str2=null,這樣定義后,只是定義了一個(gè)string 類的引用,str2并沒(méi)有指向任何地方,在使用前如果不實(shí)例化的話,都將報(bào)錯(cuò)。textBox1.Text的值為零長(zhǎng)度字符串 ""。?
null是C#關(guān)鍵字,是表示不引用任何對(duì)象的空引用的文字值。null 是引用類型變量的默認(rèn)值。?
DBNULL表示類,表示空值.?
該類用于指示不存在某個(gè)已知值(通常在數(shù)據(jù)庫(kù)應(yīng)用程序中)。?
在數(shù)據(jù)庫(kù)應(yīng)用程序中,空對(duì)象是字段的有效值。該類區(qū)分空值(空對(duì)象)和未初始化值(DBNull.Value 實(shí)例)。例如,表可以包含具有未初始化字段的記錄。默認(rèn)情況下,這些未初始化字段具有 DBNull 值。?
String.Empty表示空字符串,該屬性為只讀.?
Convert.IsDBNULL(object value)是一個(gè)方法,就是判斷參數(shù)對(duì)象是否為DBNULL對(duì)象類型,如果是返回true,不是返回false
C#中空值(null)與空字符串("")的區(qū)別
問(wèn):
string aa = String.Empty;
string aa = null;
string aa = "";
有什么區(qū)別?
答1:
一、
string aa;
和
string aa = null;
一樣。
他么都是聲明了一個(gè)sting對(duì)象的名字aa(可以理解為C\C++中指向sting類型變量的指針,或者說(shuō)引用),但是并沒(méi)有賦予aa一個(gè)與之對(duì)應(yīng)的實(shí)際對(duì)象(沒(méi)有內(nèi)存分配)。所以aa在這里什么都不是,等待分配。
二、
string aa = String.Empty;
和
string aa = "";
以及
string aa;
aa="";
是一樣的。
aa被聲明為一個(gè)空的字符串。
實(shí)際上是aa在這里代表了一個(gè)內(nèi)容為空字符串的字符串對(duì)象。
三、
究竟前面兩種情況在使用中有什么不一樣呢?
前者由于沒(méi)有指向具體對(duì)象,所以在沒(méi)有將它指向具體對(duì)象之前,不能用“.”運(yùn)算符引用string類對(duì)象的很多方法和屬性。
但是后者就可以。
?
答2:
empty
使用 Empty 常量值初始化字符串可新建字符串長(zhǎng)度為零的 String 對(duì)象。零長(zhǎng)度字符串的字符串表示形式為 ""。使用 Empty 值(而不是 null)初始化字符串可以降低發(fā)生 NullReferenceException 的可能性。
Null 字符串和空字符串
空字符串是不包含字符的 System.String 對(duì)象的實(shí)例。在各種編程方案中經(jīng)常會(huì)使用空字符串表示空白文本字段。可以對(duì)空字符串調(diào)用方法,因?yàn)樗鼈兪怯行У?System.String 對(duì)象。
相反,null 字符串并不引用 System.String 對(duì)象的實(shí)例,任何對(duì) null 字符串調(diào)用方法的嘗試都會(huì)生成 NullReferenceException
總結(jié)
以上是生活随笔為你收集整理的C#中的DBNull、Null、String.Empty和“”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 同步带周长计算公式_同步带选型计算方法
- 下一篇: Linux 开发环境搭建与使用——Sli