Как мне поместить содержимое списка в один MessageBox? - PullRequest
11 голосов
/ 02 марта 2011

По сути, у меня есть список с несколькими элементами, и я хочу, чтобы одно окно сообщений отображало их все.

Самое близкое, что у меня есть, это окно сообщения для каждого элемента (используя foreach).

То, что я хочу, эквивалентно:

MessageBox.Show ("List contains:"+

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

                )

Но, очевидно, это не сработает! Как правильно это сделать?

Ответы [ 5 ]

25 голосов
/ 02 марта 2011

Вы можете объединить все в одну строку с помощью string.Join:

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

Однако, если у вас нет доступа к .NET 4, у вас нет той перегрузки, которая требует IEnumerable<string>. Вам придется откатиться на тот, который принимает массив :

var message = string.Join(Environment.NewLine, list.ToArray());
MessageBox.Show(message);
4 голосов
/ 02 марта 2011

Вы также можете использовать Stringbuilder:

StringBuilder builder = new StringBuilder();


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

Messagebox.Show(builder.ToString());

Привет

4 голосов
/ 02 марта 2011

Если у вас есть .Net 4.0

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

Если у вас нет, но у вас есть 3,5

string s = String.Join(",", list.ToArray());
3 голосов
/ 02 марта 2011

Просто для удовольствия и на тот случай, если вам нужно сделать что-то подобное с нестроковыми коллекциями один раз - версия LINQ с использованием Aggregate, которая наиболее близка к вашему примеру синтаксиса.Не используйте это здесь, действительно используйте String.Join в этом случае, но имейте в виду, что у вас есть что-то в LINQ, которое может делать то, что вам нужно.

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

РЕДАКТИРОВАТЬ: также, как Мартиньо Фернандесуказал, что в таких случаях лучше использовать класс StringBuilder, поэтому:

MessageBox.Show("List contains: " + list.Aggregate(new StringBuilder(), 
                                               (sb,val) => sb.AppendLine(val), 
                                               sb => sb.ToString()));
0 голосов
/ 12 мая 2015

просто вам нужно сделать цикл for например:

 string total ="";
    for(int i =0; i<x.count ;i++)
   {
     total =total+x[i] +"\n";
   }
   MessageBox.Show(total);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...