2013-02-20 32 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); 
}