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

pav*_*red 6 c# linq

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

string[] strDesc = new string[] {"", "", "test"};

foreach (var Desc in strDesc)
{
      if (!string.IsNullOrEmpty(Desc))
      {
           txtbox.Text = Desc;
           break;
      }
}
Run Code Online (Sandbox Code Playgroud)

因此,根据此代码段,现在应显示txtbox "test".

要做到这一点,我有这个代码.这工作正常.但是,我想知道是否可以使用LINQ获得相同的结果,并且可能跳过使用额外的foreach循环?

Kla*_*sen 11

你可以这样做:

var result = strDesc.First(s => !string.IsNullOrEmpty(s));
Run Code Online (Sandbox Code Playgroud)

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

txtbox.Text = strDesc.First(s => !string.IsNullOrEmpty(s));
Run Code Online (Sandbox Code Playgroud)

请注意,First如果没有字符串符合条件,将抛出异常,因此您可能希望:

txtbox.Text = strDesc.FirstOrDefault(s => !string.IsNullOrEmpty(s));
Run Code Online (Sandbox Code Playgroud)

FirstOrDefault 如果没有元素计算标准,则返回null.

  • OrDefault,因为没有空字符串. (3认同)

Mar*_*ell 8

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

string s = strDesc.SkipWhile(string.IsNullOrEmpty).First();
Run Code Online (Sandbox Code Playgroud)