代码之家  ›  专栏  ›  技术社区  ›  pavanred

使用LINQ获取数组中不为空的第一个字符串?

  •  6
  • pavanred  · 技术社区  · 15 年前

    我有一个字符串数组,我需要使用字符串数组中的第一个字符串,它不是空的。让我们考虑这个代码片段-

    string[] strDesc = new string[] {"", "", "test"};
    
    foreach (var Desc in strDesc)
    {
          if (!string.IsNullOrEmpty(Desc))
          {
               txtbox.Text = Desc;
               break;
          }
    }
    

    因此,根据这个代码片段,txtbox现在应该显示 "test"

    我有这个密码。这很管用。但是,我想知道是否可以使用LINQ来获得相同的结果,或者使用额外的foreach循环跳过?

    3 回复  |  直到 13 年前
        1
  •  11
  •   Klaus Byskov Pedersen    15 年前

    你可以这样做:

    var result = strDesc.First(s => !string.IsNullOrEmpty(s));
    

    或者如果要直接在文本框中设置:

    txtbox.Text = strDesc.First(s => !string.IsNullOrEmpty(s));
    

    当心点 First

    txtbox.Text = strDesc.FirstOrDefault(s => !string.IsNullOrEmpty(s));
    

    FirstOrDefault 如果没有元素与条件匹配,则返回null。

        2
  •  8
  •   Marc Gravell    15 年前

    只是一个有趣的替代语法,以表明您并不总是需要lambdas或匿名方法来使用LINQ:

    string s = strDesc.SkipWhile(string.IsNullOrEmpty).First();
    
        3
  •  1
  •   Preet Sangha    15 年前

    IsNullOrWhiteSpace ,但在早期版本中,您需要 IsNullOrEmpty

    string desc = strDec.Where(s => !string.IsNullOrWhitespace(s))
                           .FirstOrDefault() ?? "None found";
    txtBox.Text = desc;