如何将列表的内容放在单个MessageBox中?

问题描述 投票:11回答:5

基本上,我有一个包含多个项目的列表,我想要一个消息框来显示它们。

我最接近的是每个项目的消息框(使用foreach)。

我想要的是相当于:

MessageBox.Show ("List contains:"+

Foreach (string str in list) 
{ str + Environment.Newline + }

                )

但显然这不起作用!这样做的正确方法是什么?

c# list string syntax
5个回答
24
投票

您可以使用string.Join将所有内容连接到一个字符串中:

var message = string.Join(Environment.NewLine, list);
MessageBox.Show(message);

但是,如果您无法访问.NET 4,则不会出现需要IEnumerable<string>的重载。你将不得不回到takes an array

var message = string.Join(Environment.NewLine, list.ToArray());
MessageBox.Show(message);

4
投票

如果你有.Net 4.0

string s = String.Join(",", list);

如果你没有,但有3.5

string s = String.Join(",", list.ToArray());

4
投票

您还可以使用Stringbuilder:

StringBuilder builder = new StringBuilder();


foreach(string str in list)
{
    builder.Append(str.ToString()).AppendLine();  
}           

Messagebox.Show(builder.ToString());

问候


3
投票

只是为了好玩,如果你需要用非字符串集合做一次这样的事情 - 使用Aggregate的LINQ版本,它最接近你的示例语法。不要在这里使用它,确实在这种情况下使用String.Join,但请记住,你在LINQ中有一些可以做你需要的东西。

MessageBox.Show("List contains: " + 
   list.Aggregate((str,val) => str + Environment.NewLine + val);

编辑:同样,像Martinho Fernandes指出的那样,在这种情况下使用StringBuilder类更好,所以:

MessageBox.Show("List contains: " + list.Aggregate(new StringBuilder(), 
                                               (sb,val) => sb.AppendLine(val), 
                                               sb => sb.ToString()));

0
投票

只需要制作一个for循环,例如:

 string total ="";
    for(int i =0; i<x.count ;i++)
   {
     total =total+x[i] +"\n";
   }
   MessageBox.Show(total);
© www.soinside.com 2019 - 2024. All rights reserved.