使用foreach循环定义列表中包含各种字符串的单个messageBox可能吗?

时间:2014-08-25 01:20:16

标签: c# foreach messagebox

我在var set中有各种字符串

var linhas = new[] { line8, line9, line10}

我想在一个消息框中显示它们,但是!我不想展示那些空的,所以我使用以下

foreach (var l in linhas)
    if (l != null)
    {
        MessageBox.Show(l);
    }

但正如预测的那样,它一次只能显示一条消息。是否有可能以某种方式从列表中删除空行,并在单个MessageBox中仅显示null以外的那些?

MessageBox.Show(linenotnull8 + "\n" + linenotnull10);

4 个答案:

答案 0 :(得分:5)

使用以下内容,您可以过滤掉null字符串,然后使用String.Joinlinhas中的其余字符串创建单个字符串,并使用回车符分隔每个字符串。 / p>

MessageBox.Show(String.Join(Environment.NewLine, linhas.Where(x => x != null)));

旁注...我使用Environment.NewLine代替'\n',因为它将使用正确的换行符,具体取决于您运行的环境(Windows vs Unix)。

  

包含" \ r \ n"的字符串对于非Unix平台,或包含" \ n"的字符串对于Unix平台。

答案 1 :(得分:1)

要检查数组中的空值或空值,请使用string.IsNullOrEmpty

以下是使用linq的解决方案:

linhas = linhas.Where(x => !string.IsNullOrEmpty(x)).ToArray();
string s = string.Join(Environment.NewLine, linhas);
MessageBox.Show(s);

答案 2 :(得分:1)

另一个选项,使用现有的设置,您可以使用String Builder

我还添加字符串检查nullempty

sb StringBuilder = new StringBuilder();

for(int i = 0; i < linhas.Length ; i++)
if (!String.IsNullOrEmpty(linhas[i]))
  sb.AppendFormat("{0}{1}" , linhas[i] , Environment.NewLine);

MessageBox.Show(sb.toString());

答案 3 :(得分:1)

最好使用StringBuilder:

StringBuilder sb=new StringBuilder();
    foreach (var l in linhas)
    if (l != null)
    {
        sb.AppendLine(l);
    }
MessageBox.Show(sb.ToString());

如果您不想显示空字符串,则必须更改if条件:

if(!String.IsNullOrEmpty(l) && l!="")