如何返回非空或空的第一个字符串变量

Ben*_*man 28 c# .net-3.5

如果我有5个字符串变量,并且0到5之间是null或空是否有一个简单/简单的方法返回第一个非null或空?我使用的是.NET 3.5

dan*_*dan 31

var myString = new string[]{first, second, third, fouth, fifth}
      .FirstOrDefault(s => !string.IsNullOrEmpty(s)) ?? "";

//if myString == "", then none of the strings contained a value  
Run Code Online (Sandbox Code Playgroud)

编辑:删除Where(),将谓词放在FirstOrDefault()中,谢谢Yuriy

  • 你不需要Where,使用http://msdn.microsoft.com/en-us/library/bb549039.aspx (3认同)

Kon*_*lph 18

定义扩展方法:

static string Or(this string value, string alternative) {
    return string.IsNullOrEmpty(value) ? alternative : value;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以说以下内容:

string result = str1.Or(str2).Or(str3).Or(str4) …
Run Code Online (Sandbox Code Playgroud)


Jef*_*dge 9

    private static string FirstNonEmptyString(params string[] values)
    {
        return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
    }
Run Code Online (Sandbox Code Playgroud)

这样称呼:

        Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 6

如果您有固定数量的变量,我建议使用空合并运算符来检查空值。这是迄今为止最简单的选择。

var result = s1 ?? s2 ?? s3 ?? s4 ?? s5 ?? "";
Run Code Online (Sandbox Code Playgroud)

我认为没有必要再为此做一个单独的函数,因为它已经有一个语言结构。

编辑:空字符串被认为是非空的,因此如果其中一个为空,它将返回它。

  • 您可能会注意到?运算符仅适用于空值,而不适用于操作所要求的空字符串。但提及此类运算符的存在仍然很有用。 (2认同)