代码之家  ›  专栏  ›  技术社区  ›  Ben Hoffman

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

  •  23
  • Ben Hoffman  · 技术社区  · 15 年前

    如果我有5个字符串变量,并且其中0到5个变量为空,是否有一个简单/简短的方法返回第一个不为空的变量?我正在使用.NET 3.5

    7 回复  |  直到 7 年前
        1
  •  28
  •   dan    15 年前
    var myString = new string[]{first, second, third, fouth, fifth}
          .FirstOrDefault(s => !string.IsNullOrEmpty(s)) ?? "";
    
    //if myString == "", then none of the strings contained a value  
    

    edit:removed where(),placed predicate in firstordefault(),谢谢。

        2
  •  15
  •   Konrad Rudolph    15 年前

    定义扩展方法:

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

    现在你可以说:

    string result = str1.Or(str2).Or(str3).Or(str4) …
    
        3
  •  8
  •   Jeffrey L Whitledge    15 年前
        private static string FirstNonEmptyString(params string[] values)
        {
            return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
        }
    

    这样称呼:

            Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );
    
        4
  •  1
  •   bruno conde    15 年前

    如果字符串位于 IEnumerable 你可以用 First FirstOrDefault :

    strings.First(s => !string.IsNullOrEmpty(s))
    
        5
  •  1
  •   Matt Dearing    15 年前
    var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));
    
        6
  •  0
  •   kervin    15 年前

    对。

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

    没有表达树,没有LINQ滥用,没有模糊的语言特征。同样的运行时性能和一个第一年的CS学生可以知道你在做什么。

        7
  •  0
  •   jrummell    15 年前

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

    string[] strings = new[] {"", "a", "b", ""};
    
    string firstNotNullOrEmpty = 
        strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();