2009-01-11 57 views
11

是否有可能在C#中有一個開關,它檢查值是空還是空不是「」但是String.Empty?我知道我能做到這一點:C#切換String.IsNullOrEmpty

switch (text) 
{ 
    case null: 
    case "": 
     break; 
} 

是否有更好的東西,因爲我不希望有一個大名單IF語句?

I'mm試圖取代:

if (String.IsNullOrEmpty(text)) 
    blah; 
else if (text = "hi") 
    blah 
+0

我不知道還有的String.Empty和 「」 之間的差異。有什麼不同? – recursive 2009-01-11 02:14:09

+0

沒有。內容級別相同。參考是不同的。 String.Empty在返回不同的實例時總是返回相同的實例。 – 2009-01-11 02:26:29

+2

我很確定兩個「」實際上是同一個對象,因爲.net會實現字符串,但不是正面的。 object.ReferenceEquals表示它們是相同的。 – JoshBerke 2009-01-11 05:05:28

回答

28

我建議像下面這樣:

switch(text ?? String.Empty) 
{ 
    case "": 
     break; 
    case "hi": 
     break; 
} 

是什麼你在找什麼?

5

怎麼樣

if (string.isNullOrEmpty(text)) 
{ 
    //blah 
} 
else 
{ 
switch (text) 
{ 
    case "hi": 
} 

}

3

String.Emptydocumentation

該字段的值是 零長度字符串 「」。

我認爲這意味着""String.Empty之間沒有區別。你爲什麼試圖區分它們?

21

您的示例switch聲明有什麼問題?

switch (text) 
{ 
    case null: 
    case "": 
     foo(); 
     break; 
    case "hi": 
     bar(); 
     break; 
} 

它的工作原理(出於某種原因,這讓我感到驚訝 - 我認爲它會抱怨或對null情況下崩潰),很明顯。

對於這個問題,你爲什麼擔心String.Empty?我在這裏錯過了一些東西。

3

一個空字符串是「」,它等於String.Empty。之所以你可以將放在case語句中,而不是「String.Empty」是因爲「Empty」是類「String」的一個字段,「」實際上是一個常量值。

在情況下允許使用常量值,String.Empty是一個字段,可以在運行時更改。 (在這種情況下將保持不變,但每個類的不是所有的靜態字段是恆定值)。

在「如果」,該條件是在運行時評估的情況下,如果不需要不變的價值。

我希望這可以解釋爲什麼。

3

我剛纔注意到的一點是,你可以用結合if/else和switch語句!需要檢查先決條件時非常有用。

if (string.IsNullOrEmpty(text)) 
{ 
    //blah 
} 
else switch (text) 
{ 
    case "hi": 
     Console.WriteLine("How about a nice game of chess?"); 
     break; 
    default: 
     break; 
} 
0
string StrMode; 
if (!string.IsNullOrEmpty(StrMode)) 
{ 
    switch (StrMode.Trim()) 
    { 
     case "Souse": 
     { 
      //Statement Eg: 
      MesssageBox.Show("Souse"); 
      break; 
     } 

     case "Company Agent": 
     { 
      //Statement Eg: 
      MesssageBox.Show("Souse"); 
      break; 
     } 

     default: 
      return; 
    } 
}