c#避免显示多个MessageBox?

时间:2018-11-12 03:51:18

标签: c# .net

构建一个简单的Windows窗体,任务是将文件中的数据内容读入linq。一切都可以编译,这很好,问题是输出,将其包装在一个foreach中,并且一旦显示信息,而不是一次显示所有数据,而是单击OK一次一个地显示。

这很奇怪,因为它与其他代码不同,并且遵循相同的方法。这就是我在做什么。

为什么要一一显示结果?

foreach (var info in linqData)
{
  MessageBox.Show(Convert.ToString(info.Count)+""+info.Line);
}

2 个答案:

答案 0 :(得分:5)

StringBuilder sb=new StringBuilder();
foreach (var info in linqData)
{
 sb.Append(info.Count);
 sb.Append(";");
 sb.Append(info.Line);
 sb.Append(Environment.Newline); 
}
MessageBox.Show(sb.ToString());

答案 1 :(得分:0)

请明确说明,问题是因为循环中有一个消息框

您可以使用 Linq

var info = linqData.Select(x => $"{x.Count} {x.Line}");

MessageBox.Show(string.Join(Environment.NewLine,info);

or和StringBuilder

var sb = new StringBuilder();

foreach (var info in linqData)
  sb.AppendLine($"{xinfo.Count} {info.Line}");

MessageBox.Show(sb.ToString());

其他资源

Enumerable.Select Method

  

将序列的每个元素投影为新形式。

String.Join Method

  

连接指定数组的元素或a的成员   集合,在每个元素之间使用指定的分隔符或   成员。

$ - string interpolation (C# Reference)

  

$特殊字符将字符串文字标识为插值   串。插值字符串是可能包含以下内容的字符串文字   插值表达式。当插值字符串解析为   结果字符串,带有插值表达式的项目将替换为   表达式结果的字符串表示形式。此功能是   在该语言的C#6和更高版本中可用。

StringBuilder Class

  

代表可变的字符串。

StringBuilder.AppendLine Method

  

追加默认的行终止符或指定字符串的副本   以及默认的行终止符,直到该实例的末尾。

Environment.NewLine Property

  

获取为此环境定义的换行字符串。