将字符串列表转换为单个字符串

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

MyList 包含像 12345523 这样的数值。

我尝试使用下面的代码,但是数值会消失。

string Something = Convert.ToString(MyList);

我还需要每个值用逗号(“,”)隔开。

如何将 List<string> Mylist 转换为 string


6个回答

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

20

尝试这段代码:

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

结果为:"12,13,14"


8

或者,如果您关注性能,您可以使用循环。

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 ","

这个基准测试显示使用上述循环比String.Join()快大约16%(平均3次运行)。


8
完全可以使用LINQ,按照以下方式进行操作:
string finalString = collection.Aggregate("", (current, s) => current + (s + ","));

然而,为了更好的可读性,我建议使用循环版本或者string.Join机制。


你能详细说明一下语法吗?我猜第一个参数是返回字符串,它将与第二个参数连接起来,我的理解正确吗?变量“current”和“s”具体指什么,是当前字符串和当前值吗? - Wouter Vanherck

6
你可以为此编写一个扩展方法,这样它也会更易读:
public static class GenericListExtensions
{
    public static string ToString<T>(this IList<T> list)
    {
        return string.Join(",", list);
    }
}

然后您可以:

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

2

我必须在被接受的答案上添加额外的部分。如果没有它,Unity会抛出这个错误:

最初的回答:

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

解决方案是使用.ToArray()
List<int> stringNums = new List<string>();
String.Join(",", stringNums.ToArray())

这不应该发生,因为 string.Join 可以处理 IEnumerable,而 ListArray 都是 IEnumerable - Bip901

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接