Как мне преобразовать список в строку в C #?
Когда я выполняю toString
объект List, я получаю:
System.Collections.Generic.List`1 [System.String]
Как мне преобразовать список в строку в C #?
Когда я выполняю toString
объект List, я получаю:
System.Collections.Generic.List`1 [System.String]
Ответы:
Может быть, вы пытаетесь сделать
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.
Я собираюсь пойти с моим внутренним чувством и предположить, что вы хотите объединить результат вызова ToString
каждого элемента списка.
var result = string.Join(",", list.ToArray());
Вы можете использовать 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
вы можете заменить его на строковый разделитель по вашему выбору.
Если вы хотите что-то более сложное, чем простое соединение, вы можете использовать LINQ, например:
var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
Возьму ["A", "B", "C"] и произведу "(a) (b) (c)"
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 () в списке.
У вас есть List<string>
- так что если вы хотите, чтобы они были объединены, что-то вроде
string s = string.Join("", list);
будет работать (по крайней мере, в .NET 4.0). Первый параметр - это разделитель. Таким образом, вы также можете разделить запятыми и т. Д.
Вы также можете захотеть использовать StringBuilder для выполнения конкатенации, а не для формирования списка.
.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);
}
}
(Обратите внимание, что это свободный и непроверенный код. На данный момент у меня нет удобного компилятора. Поэтому вы захотите немного поэкспериментировать с ним.)
Трудно сказать, но, возможно, вы ищете что-то вроде:
var myString = String.Join(String.Empty, myList.ToArray());
Это неявно вызовет метод ToString () для каждого из элементов в списке и объединит их.
String.Concat()
достигнет того же самого лучше.
Если вы хотите , чтобы включить элементы в списке в большую длинную строку, сделайте следующее: String.Join("", myList)
. Некоторые старые версии фреймворка не позволяют вам передавать IEnumerable в качестве второго параметра, поэтому вам может потребоваться преобразовать ваш список в массив, вызвав .ToArray ().
Прямой ответ на ваш вопрос, 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();
Этот метод помог мне при попытке получить данные из текстового файла и сохранить их в массиве, а затем назначить их доступной строке.
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");
string marRes = string.Join(Environment.NewLine, lines.ToArray());
Надеюсь, кто-то может помочь !!!!
Все ответы выше НЕ работают для вложенных списков.