在 if 语句中检查多个字符串是否为 null

问题描述 投票:0回答:8

是否有更好(更好)的方法来编写这个 if 语句?

if(string1 == null && string2 == null && string3 == null && string4 == null && string5 == null && string6 == null){...}
c# string null
8个回答
65
投票

也许使用 空合并运算符(

??
):

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

如果所有字符串都在集合中,您可以使用 Linq:

bool allNull = strings.All(s => s == null);

15
投票

您可以将所有字符串放入列表中并使用

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

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

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

14
投票

如果你做了这样的函数:

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?>

相同级别的优化。)

    


6
投票
或者如果您不想检查空字符串,请使用 
strs.All(str => str == null)

    


3
投票
.All()

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



2
投票
更好

还是更好,或者不是,你可以使用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! }



1
投票

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

	
© www.soinside.com 2019 - 2024. All rights reserved.