2013-02-20 33 views
15

有沒有更好(更好)的方法來編寫這個if語句?在if語句中檢查幾個字符串爲null

if(string1 == null && string2 == null && string3 == null && string4 == null && string5 == null && string6 == null){...} 
+1

如果(String.IsNullOrWhiteSpace(字符串1)&& ... - >所以你不僅要檢查空字符串,而且要檢查空字符串和一些只包含空格字符串 – Offler 2013-02-20 14:42:39

+3

你真的需要這麼多單獨的字符串變量嗎?你能不能創建一個數組或字符串列表並使用它?它很可能會簡化很多其他操作。 – 2013-02-20 14:43:11

+1

根據你提供的信息,不,不是真的(如果這對你有幫助,我想你可以分幾行),但@JohnWillemse點的立場。如果你需要很多字符串變量,也許你需要考慮使用一些可以封裝這個邏輯的不同數據結構。 – 2013-02-20 14:44:53

回答

31

也許使用null-coalescing operator(??)

if((string1 ?? string2 ?? string3 ?? string4 ?? string5 ?? string6) == null){ ;} 

如果所有字符串集合中,你可以使用LINQ:

bool allNull = strings.All(s => s == null); 
3
string[] strs = new string[] { string1, string2, string3 }; 
if(strs.All(str => string.IsNullOrEmpty(str)) 
{ 
    //Do Stuff 
} 

或者使用strs.All(str => str == null)如果你不想檢查空字符串。

14

你可以把列表中的所有字符串,並使用

if(listOfStrings.All(s=>s==null)) 

至少,你可以把它放在多行

if(string1 == null 
    && string2 == null 
    && string3 == null 
    && string4 == null 
    && string5 == null 
    && string6 == null) 
{...} 
+0

我用'||'代替'&&'來克服之間的空值 – stom 2015-12-08 17:02:20

+0

@stom你是什麼意思的「之間的空值」?如果你使用'||'而不是'&&',你至少會得到一個值爲null,而不是所有的值都是null。 – juharr 2015-12-08 18:11:53

3

製作的串(列表或數組中的IEnumerable。 ...),那麼你可以使用.All()

var myStrings = new List<string>{string1,string2,string3....}; 
if(myStrings.All(s => s == null)) 
{ 
    //Do something 
} 
+2

或者在一行中...'if(Enumerable.All(new string [] {str1,str2,str3,str4},s => s == null))' – 2013-02-20 14:46:39

+0

@JimMischel:這會創建一個額外的集合縮短評估。順便說一句,它甚至不會真的縮短它。 – 2013-02-20 15:21:08

+0

@TimSchmelter:是的,它確實創建了一個額外的集合,正如你提出的答案一樣。 – 2013-02-20 15:53:07

1

這也應該這樣做:

if (string.IsNullOrEmpty(string1 + string2 + string3 + string4 + string5 + string6)){...} 
+3

如果它們爲空,那麼它將返回True,而不僅僅是null。 – Igoy 2013-02-20 14:47:56

+0

只需使用'string.IsNullOrWhiteSpace'來解決上述問題及其結果。喜歡這種方法。 – kuskmen 2016-05-11 17:27:55

1

好了,我不知道這是否是更好更好,或沒有,你可以使用IEnumerable.Any方法就像 這個;

確定一個序列是否包含任何元素。

List<string> list = new List<string>{"string1","string2","string3", "string4", "string5"}; 
if(list.Any(n => n == null)) 
{ 

} 

你也可以使用Enumerable.All()方法等;

確定序列的所有元素是否滿足條件。

if (Enumerable.All(new string[] { string1, string2, string3, string4, string5 }, s => s == null)) 
{ 
     Console.WriteLine("Null"); 
} 
2

如果你想檢查空或空,這裏是沒有數組另一種方式:

if (string.Concat(string1, string2, string3, string4, string5).Length == 0) 
{ 
    //all null or empty! 
} 
+0

不檢查全部是否爲空,與Dennisch的答案相同。 – 2013-02-20 15:17:10

+0

@Tim確實如此,編輯過的文章反映了這一點。 – 2013-02-20 15:18:49

10

如果你犯了這樣一個功能:

public static bool AllNull(params string[] strings) 
{ 
    return strings.All(s => s == null); 
} 

那麼你可以這樣稱呼它:

if (AllNull(string1, string2, string3, string4, string5, string6)) 
{ 
    // ... 
} 

其實,你可以改變AllNull()與任何引用類型的工作,像這樣:

public static bool AllNull(params object[] objects) 
{ 
    return objects.All(s => s == null); 
}