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

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

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

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

Ответ 1

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

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

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

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

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

Ссылка:

Join<T>(String, IEnumerable<T>) 
Concatenates the members of a collection, using the specified separator between each member.

Ответ 2

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

var result = string.Join(",", list.ToArray());

Ответ 3

Вы можете использовать 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 вы можете заменить его строковым разделителем на ваш выбор.

Ответ 4

Если вам нужно что-то немного более сложное, чем простое соединение, вы можете использовать LINQ, например.

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

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

Ответ 5

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() в списке.

Ответ 6

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

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

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

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

Ответ 7

Метод .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);
    }
}

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

Прямой ответ на ваш вопрос 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();

Ответ 11

Этот метод помог мне при попытке извлечь данные из текстового файла и сохранить их в массиве, а затем назначить их доступной строке.

string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
string marRes = string.Join(Environment.NewLine, lines.ToArray());

Надеюсь, кто-то может помочь !!!!