是否有更好(更好)的方法来编写这个 if 语句?
if(string1 == null && string2 == null && string3 == null && string4 == null && string5 == null && string6 == null){...}
您可以将所有字符串放入列表中并使用
if(listOfStrings.All(s=>s==null))
至少你可以把它放在多行上
if(string1 == null
&& string2 == null
&& string3 == null
&& string4 == null
&& string5 == null
&& string6 == null)
{...}
如果你做了这样的函数:
public static bool AllNull(params string[] strings)
{
return strings.All(s => s == null);
}
那么你可以这样称呼它:
if (AllNull(string1, string2, string3, string4, string5, string6))
{
// ...
}
实际上,您可以更改 AllNull() 以使用 any 引用类型,如下所示:
public static bool AllNull(params object[] objects)
{
return objects.All(s => s == null);
}
2024 年 .NET 9/C# 13 更新:
现在我们有了可为空的注释和参数集合,因此我们可以像这样编写
AllNull()
:
public static bool AllNull(params Span<object?> objects)
{
foreach (var obj in objects)
{
if (obj is not null)
return false;
}
return true;
}
这样做的好处是,您可以通过传递引用对象列表来调用它,而无需编译器必须分配数组并将其传递给 AllNull()
方法,这可能会更高效。
IEnumerable<object?>
来实现它:
public static bool AllNull(params IEnumerable<object?> objects)
{
return objects.All(s => s == null);
}
这允许将更多的集合类型传递给它(但它通常不允许与使用
Span<object?>
相同级别的优化。)
或者如果您不想检查空字符串,请使用
strs.All(str => str == null)
。
还是更好,或者不是,你可以使用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"); }
,这里是另一种不使用数组的方法:
if (string.Concat(string1, string2, string3, string4, string5).Length == 0)
{
//all null or empty!
}
if (string.IsNullOrEmpty(string1 + string2 + string3 + string4 + string5 + string6)){...}