在MessageBox中显示结果

时间:2018-06-09 11:25:17

标签: c# string

有一个最常出现的3个单词的代码

string words = "One one Two two three four".ToLower();

var results = words
  .Split(' ')
  .Where(x => x.Length > 3)
  .GroupBy(x => x)
  .Select(x => new { 
     Count = x.Count(), 
     Word = x.Key })
  .OrderByDescending(x => x.Count)
  .Take(3);

foreach (var item in results)
{
    MessageBox.Show(String.Format("{0} occurred {1} times", item.Word, item.Count));
}

它有效,但我想按一下按钮,并在MessageBox中显示所有结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

加入字符串然后只显示消息框一次:

MessageBox.Show(String.Join("\n", results.Select(x => String.Format("{0} occurred {1} times", x.Word, x.Count)));

或使用字符串插值:

MessageBox.Show(String.Join("\n", 
                   results.Select(x => $"{x.Word} occurred {x.Count} times"));

答案 1 :(得分:1)

我的建议是构建要在foreach循环的消息框中显示的字符串,然后调用MessageBox.Show方法。 要获得换行符,您可以使用“\ n”或Environment.NewLine。 要构建字符串,您可以使用stringbuilder。

例如:

var stringBuilder = new System.Text.StringBuilder();

foreach (var item in results)
{
    stringBuilder.Append($"{item.Word} occurred {item.Count} times");
    stringBuilder.Append(Environment.NewLine);
}

MessageBox.Show(stringBuilder.ToString());

如果您从结果.ToList()中列出一个列表,那么您可以将foreach写得更短:

var stringBuilder = new System.Text.StringBuilder();

results.ForEach(r => stringBuilder.Append($"{r.Word} occurred {r.Count} times{Environment.NewLine}"));

MessageBox.Show(stringBuilder.ToString());