基本上,我有一個列表中有多個項目,我想要一個消息框來顯示它們全部。如何將列表的內容放入單個MessageBox中?
我得到的最接近的是每個項目的消息框(使用foreach
)。
我要的是等價的:
MessageBox.Show ("List contains:"+
Foreach (string str in list)
{ str + Environment.Newline + }
)
但很明顯,這是不行的!這樣做的正確方法是什麼?
基本上,我有一個列表中有多個項目,我想要一個消息框來顯示它們全部。如何將列表的內容放入單個MessageBox中?
我得到的最接近的是每個項目的消息框(使用foreach
)。
我要的是等價的:
MessageBox.Show ("List contains:"+
Foreach (string str in list)
{ str + Environment.Newline + }
)
但很明顯,這是不行的!這樣做的正確方法是什麼?
你可以參加一切成一個單一的字符串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);
如果你有.NET 4.0
string s = String.Join(",", list);
如果你沒有,但有3.5
string s = String.Join(",", list.ToArray());
您還可以使用Stringbuilder:
StringBuilder builder = new StringBuilder();
foreach(string str in list)
{
builder.Append(str.ToString()).AppendLine();
}
Messagebox.Show(builder.ToString());
Regards
AppendLine接受一個參數的重載。使用它可以使代碼更簡單。此外,還有一個重載需要一個對象並在其上調用ToString,所以不需要自己調用它。 – 2011-03-02 04:11:11
只是爲了好玩,以防萬一您需要使用非字符集合進行一次操作 - LINQ版本使用Aggregate
,這與您的示例語法最接近。不要在這裏使用它,在這種情況下確實使用String.Join
,但請記住,您在LINQ中有一些可以執行您需要的操作。
MessageBox.Show("List contains: " +
list.Aggregate((str,val) => str + Environment.NewLine + val);
編輯:另外,像Martinho費爾南德斯指出,這是更好地使用StringBuilder
類在這樣的情況下,如此:
MessageBox.Show("List contains: " + list.Aggregate(new StringBuilder(),
(sb,val) => sb.AppendLine(val),
sb => sb.ToString()));
如果你使用'Aggregate',最好聚合一個StringBuilder,而不是一個字符串:'.Aggregate(new StringBuilder(),(sb,x)=> sb.AppendLine(x),sb => sb。 ToString());':P – 2011-03-02 04:17:25
@Martinho Fernandes:對於非常古怪的解決方案,這是一個非常好的建議! – Dyppl 2011-03-02 04:18:55
考慮將''List包含:''傳遞給'StringBuilder'構造函數。 在結尾處添加缺少的缺陷。 – tm1 2017-01-20 13:12:19
只是你需要做一個循環,例如:
string total ="";
for(int i =0; i<x.count ;i++)
{
total =total+x[i] +"\n";
}
MessageBox.Show(total);
使用'「,」'而不是'Enviornment.NewLine'。 – stackptr 2013-10-19 15:34:19