在C#中将列表转换为字符串


184

如何在C#中将列表转换为字符串?

toStringList对象上执行时,我得到:

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


1
List是一个集合,此字符串应该是什么样的?
Marko

您可以尝试这里提到的三种方法中的任何一种。
RBT

Answers:


363

也许您正在尝试做

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.

4
你的意思是字符串combindedString = string.Join(“,”,myList.ToArray());
2014年

2
参数“ 2”:无法从“ System.Collections.Generic.List <字符串>”转换为“字符串[]”
2014年

9
我最近使用了它,它有效-只是省略了.ToArray()
Adrian K

3
@AdrianK您是正确的,因为.Net 4.0添加了传递任何IEnumerable <string>的功能。但是4.0版于2010年4月发布,在此问题和答案发布之前,所以这里的人们可能还没有意识到(除了下面的几句话)
Andrew Steitz

对于vb.net,Dim combindedString为String = String.Join(“,”,myList.ToArray())
PartTimeNerd

55

我将直言不讳,并假设您想将调用ToString列表中每个元素的结果连接起来。

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

16

您可以使用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

如果您想要比简单的连接稍微复杂的东西,可以使用LINQ,例如

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

将采用[“ A”,“ B”,“ C”]并产生“(a)(b)(c)”


1
使用带有种子的Aggregate作为第一个参数,以避免对空集合抛出InvalidOperationException。
Huacanacha 2015年

13

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()。


9

您有一个List<string>-因此,如果您希望将它们串联起来,例如

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

将工作(至少在.NET 4.0中)。第一个参数是定界符。因此,您也可以用逗号分隔等。

您可能还想看看使用StringBuilder进行运行串联,而不是形成列表。


8

.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);
    }
}

(请注意,这是徒手编写且未经测试的代码。目前我没有任何方便的编译器。因此,您需要对其进行一些试验。)


当我调用它不是ToString或使用通用参数执行它时,它确实起作用。但是我喜欢您使用扩展方法的想法:)
IAdapter


2

如果您希望将列表中的项目转换成长字符串,请执行以下步骤: String.Join("", myList)。某些较旧版本的框架不允许您将IEnumerable作为第二个参数传递,因此您可能需要通过调用.ToArray()将列表转换为数组。


2

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();

1
在生产代码中,请确保您的列表包含任何元素,否则它将引发异常。
AZ_

1

当尝试从文本文件中检索数据并将其存储在Array中,然后将其分配给可变字符串时,此方法对我有帮助。

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

希望可以对某人有所帮助!


0

这似乎对我有用。

var combindedString = new string(list.ToArray());

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.