Преобразование списка строк в одну строку

List<string> MyList = (List<string>)Session["MyList"];

MyList содержит такие значения, как: 12 34 55 23.

Я попытался использовать код ниже, однако значения исчезают.

string Something = Convert.ToString(MyList);

Мне также нужно, чтобы каждое значение разделялось запятой ( "," ).

Как преобразовать List<string> Mylist в string?

Ответ 1

string Something = string.Join(",", MyList);

Ответ 2

Попробуйте этот код:

var list = new List<string> {"12", "13", "14"};
var result = string.Join(",", list);
Console.WriteLine(result);

Результат: "12,13,14"

Ответ 3

Или, если вас беспокоит производительность, вы можете использовать цикл,

var myList = new List<string> { "11", "22", "33" };
var myString = "";
var sb = new System.Text.StringBuilder();

foreach (string s in myList)
{
    sb.Append(s).Append(",");
}

myString = sb.Remove(sb.Length - 1, 1).ToString(); // Removes last ","

Этот контрольный показатель показывает, что использование вышеприведенного цикла на ~ 16% быстрее, чем String.Join() (усредненное за 3 прогона).

Ответ 4

В общем случае вы можете использовать LINQ и выполнять следующие действия:

string finalString = collection.Aggregate("", (current, s) => current + (s + ","));

Однако для чистой читаемости я предлагаю использовать либо версию цикла, либо механизм string.Join.

Ответ 5

Вы можете сделать для этого метод расширения, поэтому он также будет более читабельным:

public static class GenericListExtensions
{
    public static string ToString<T>(this IList<T> list)
    {
        return string.Join(",", list);
    }
}

И затем вы можете:

string Something = MyList.ToString<string>();

Ответ 6

Мне пришлось добавить дополнительный бит над принятым ответом. Без этого Unity выкинула эту ошибку:

cannot convert 'System.Collections.Generic.List<string>' expression to type 'string[]'

Решение было использовать .ToArray()

List<int> stringNums = new List<string>();
String.Join(",", stringNums.ToArray())