Преобразовать список в строку в C # - PullRequest
157 голосов
/ 13 февраля 2011

Как мне преобразовать список в строку в C #?

Когда я выполняю toString для объекта List, я получаю:

System.Collections.Generic.List`1 [System.String]

Ответы [ 11 ]

311 голосов
/ 13 февраля 2011

Может быть, вы пытаетесь сделать

string combindedString = string.Join( ",", myList.ToArray() );

Вы можете заменить "," на то, на что хотите разделить элементы в списке.

51 голосов
/ 13 февраля 2011

Я собираюсь пойти с моим внутренним чувством и предположить, что вы хотите объединить результат вызова ToString для каждого элемента списка.

var result = string.Join(",", list.ToArray());
15 голосов
/ 13 февраля 2011

Вы можете использовать string.Join:

List<string> list = new List<string>()
{
    "Red",
    "Blue",
    "Green"
};

string output = string.Join(Environment.NewLine, list.ToArray());    
Console.Write(output);

Результат будет:

Red    
Blue    
Green

В качестве альтернативы Environment.NewLine, вы можете заменить его строковым разделителем на ваш выбор.

14 голосов
/ 13 февраля 2011

Если вы хотите что-то более сложное, чем простое объединение, вы можете использовать LINQ, например:

var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");

Возьмет ["A", "B", "C"] и произведет "(a) (b) (c)"

13 голосов
/ 13 февраля 2011

String.Join(" ", myList) или String.Join(" ", myList.ToArray()). Первый аргумент - это разделитель между подстроками.

var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"

В зависимости от вашей версии .NET вам может понадобиться сначала использовать ToArray () в списке.

8 голосов
/ 13 февраля 2011

У вас есть List<string> - поэтому, если вы хотите, чтобы они были объединены, что-то вроде

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

работало бы (по крайней мере, в .NET 4.0).Первый параметр - это разделитель.Таким образом, вы также можете разделять запятыми и т. Д.

Возможно, вы захотите использовать StringBuilder для выполнения конкатенации, а не для формирования списка.

8 голосов
/ 13 февраля 2011

Метод .ToString() для ссылочных типов обычно разрешается обратно в System.Object.ToString(), если вы не переопределите его в производном типе (возможно, используя методы расширения для встроенных типов). Поведение по умолчанию для этого метода - выводить имя типа, для которого он вызывается. Итак, то, что вы видите, - это ожидаемое поведение.

Вы можете попробовать что-то вроде string.Join(", ", myList.ToArray());, чтобы достичь этого. Это дополнительный шаг, но его можно добавить в метод расширения на System.Collections.Generic.List<T>, чтобы сделать его немного проще. Примерно так:

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

(Обратите внимание, что это произвольный и непроверенный код. На данный момент у меня нет под рукой компилятора. Поэтому вы захотите немного поэкспериментировать с ним.)

3 голосов
/ 13 февраля 2011

Трудно сказать, но, возможно, вы ищете что-то вроде:

var myString = String.Join(String.Empty, myList.ToArray());

Это будет неявно вызывать метод ToString () для каждого элемента в списке и объединять их.

2 голосов
/ 13 февраля 2011

Если вы хотите превратить элементы списка в большую длинную строку, сделайте следующее: String.Join("", myList).Некоторые старые версии платформы не позволяют передавать IEnumerable в качестве второго параметра, поэтому вам может потребоваться преобразовать ваш список в массив, вызвав .ToArray ().

1 голос
/ 26 февраля 2014

Прямой ответ на ваш вопрос String.Join, как уже упоминали другие.

Однако, если вам нужны некоторые манипуляции, вы можете использовать Aggregate:

List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");

string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...