通常我們判斷空字符串,在c#會使用 if (x = "")的方法,首先要明確在c#中空字符串可以是"",String.Empty和null這三種,三者的定義如下,
1."",是分配一個長度為空的內存空間;
2.String.Empty,不分配內存空間,一般用string.Empty來定義。(另有一說是分配有內存空間的)
3.null,沒有分配內存空間;
一般來說1和2基本上是可以互換使用,例如:
String temp="";
String temp1=string.Empty;
在使用IF語句作判斷的時候,
if (temp == string.Empty)
{
}
if (temp1 == "")
{
}
if的語句都成立的。
從網上的結論來看,""與string.Empty在用法與性能上基本沒區別。string.Empty是在語法級別對""的優化。
同樣按網上的說法,判斷空字符串可以用以下三種方法,按性能從高到低的順序為:
str.Length==0 、str==String.Empty 、str == ""
繼續研究下去:
那現在需要區分string.Empty與null在判斷的時候是否一樣。
如果string str=null後使用str.length == 0 將會報錯,對於null通常使用 if (str == null) 這樣的方法來作判斷。
SO,str.Length==0 、str==String.Empty 、str == ""這三種方法,對於null的空字符串,似乎是無效的。
c#提供了有一個函數,string.IsNullOrEmpty(),如果 string為空或空字符串 ("")、null等,則為 true;否則為 false。
該函數可以同時檢測,"",string.Empty,null等情況,
微軟官方說法:
IsNullOrEmpty 是一種簡便方法,它使您能夠同時測試 String 是否為空或其值是否為 Empty。 它與下列代碼等效:
result = s Is Nothing OrElse s = String.Empty
1、result = s == null || s == String.Empty;
2、result = s == nullptr || s == String::Empty;
如果你平時還經常使用if (str == "")的判斷寫法,則需要改改了。
注:本文章從網上收集整理,部分內容例如性能之說未經測試證實,但本文結論,使用string.IsNullOrEmpty()來檢測空字符串,則是成立的。
使用例子:
01.if (String.IsNullOrEmpty(str))
02.{ 03. return "is null or empty"; 04.}