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

时间:2010-03-29 15:45:32

标签: c# .net-3.5

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

8 个答案:

答案 0 :(得分:29)

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

//if myString == "", then none of the strings contained a value  

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

答案 1 :(得分:16)

定义扩展方法:

static string Or(this string value, string alternative) {
    return string.IsNullOrEmpty(value) ? alternative : value;
}

现在您可以说以下内容:

string result = str1.Or(str2).Or(str3).Or(str4) …

答案 2 :(得分:8)

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

这样称呼:

        Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );

答案 3 :(得分:1)

如果您的字符串位于IEnumerable,则可以使用FirstFirstOrDefault

strings.First(s => !string.IsNullOrEmpty(s))

答案 4 :(得分:1)

var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));

答案 5 :(得分:0)

如果你使用的是.NET 3.5,那么使用Linq非常容易。

string[] strings = new[] {"", "a", "b", ""};

string firstNotNullOrEmpty = 
    strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();

答案 6 :(得分:0)

string selected = null;
foreach(string currStr in strArray)
    if(String.IsNullOrEmpty(currStr)==false)
    {
        selected = currStr;
        break;
    }

没有表达式树,没有LINQ滥用,没有晦涩的语言功能。相同的运行时性能和第一年的CS学生可以弄清楚你在做什么。

答案 7 :(得分:0)

如果您有固定数量的变量,我建议使用空合并运算符,因为这似乎是最简单的选择。

var result = s1 ?? s2 ?? s3 ?? s4 ?? s5 ?? "";

我认为,鉴于已经有一种语言构造,因此不再需要为此做一个单独的功能。