2011-08-02 20 views
3

我使用下面的代碼:在C#中處理空字符串?運營商

string x = str1 ?? str2 ?? str3 ?? "No string"; 

但是如果這些字符串(STR1,STR2,STR3)是其中的String.Empty是!= NULL?

我該如何處理這種情況?

回答

2

我會寫一個輔助方法:

public static string Coalesce(string defaultValue, params string[] values) { 
     if (string.IsNullOrEmpty(defaultValue)) 
      throw new ArgumentException("defaultValue"); 

     foreach (var value in values) { 
      if (!string.IsNullOrEmpty(value)) 
       return value; 
     } 
     return defaultValue; 
    } 

用法:

var data = StringHelpers.Coalesce("No text", s1, s2, s3, s4); 

這不是特別有用,但你甚至可以創建一個擴展方法(附加在第一面前「這個」參數),也許改成一個更「流利」的名稱,並寫下類似內容:

var data = "No Text".IfEmptyOrNull(s1, s2, s3); 
+0

這是一個相當尷尬的使用模式,不是嗎?我應該澄清 - 擴展方法是一個尷尬的使用模式。 – dotnetnate

+0

是的,它看起來像紅寶石與「1.minutes_from_now」表達式 – Vasea

7

You ca不與??。你可以用Linq做這樣的事情:

string x = new[]{ str1, str2, str3, "No string" }.First(x => !string.IsNullOrEmpty(x)); 
+1

你wally - 你的條件'x!= null'只是複製原始解決方案,而不解決問題:-) –

+0

@丹:該死的,以爲沒有人看到; ) – porges

+0

+1整潔的把戲! –

0

你可以使用String.IsNullOrEmpty()

E.g.

String.IsNullOrEmpty(null)   => true 
String.IsNullOrEmpty("")    => true 
String.IsNullOrEmpty("hello, world!") => false