将`List<string>`转换为逗号分隔的字符串

86

有没有一种快速将 List<string> 转换为 C# 中逗号分隔的 string 的方法?

我是这样做的,但也许有更快或更有效的方法?

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = string.Join(",", ls.ToArray());

PS:在这个网站上搜索过,但大部分解决方案都是针对Java或Python的。


2
不错,你做得很对。虽然我认为你不需要做 ToArray() - Yuck
2
更快的编写还是更快的执行? - Ilia G
两者都可以 :), 但显然这是不可能的。 - Ozkan
@Yuck 需要转换为 string[](因为我不使用 .NET 4 - Ozkan
@Ozkan,你应该为你的问题添加与框架版本相关的标签。我认为大多数答案都会假设你正在使用最新版本。 - Yuck
只需像这样使用Select和String.Join: string type = String.Join(",", ls.Select(s => s).ToArray()); - Fred Sena
6个回答

124
在.NET 4中,您不需要调用ToArray() - string.Join已经进行了重载,可以接受IEnumerable<T>或仅IEnumerable<string>
在.NET 4之前可能有更有效的方法,但你真的需要它们吗?这实际上是你代码中的瓶颈吗?
您可以遍历列表,计算出最终大小,分配一个完全正确大小的StringBuilder,然后自己进行连接。这将避免为很少原因而构建额外的数组 - 但这并不能节省多少时间,而且需要写更多的代码。

23
string.Join(",",myList ) - Mahesh

20

就 Jon Skeet 的答案展开说明,在 .Net 4 中的代码如下:

string myCommaSeperatedString = string.Join(",",ls);

15

以下代码将生成逗号分隔的列表。请确保包含System.Linq的using语句。

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = ls.Aggregate((x,y) => x + "," + y);

将产生one,two

如果您需要在逗号后添加空格,只需将最后一行更改为string type = ls.Aggregate((x,y) => x + ", " + y);


@Ozkan,请测试一下并告诉我们。 - Dan J
实际上,我没有检查过。只有List中有两个项时,它们的速度是相等的,但是如果将其扩展到100,000项,Aggregate实际上比string.Join慢得多。知道这一点还是不错的。过去我更喜欢使用Aggregate,但我想在未来会转向使用string.Join。 - Anthony Shaw
而且,我发现如果列表为空,这会抛出异常。 - M Akin

4

按照以下步骤进行:

       List<string> name = new List<string>();   

        name.Add("Latif");

        name.Add("Ram");

        name.Add("Adam");
        string nameOfString = (string.Join(",", name.Select(x => x.ToString()).ToArray()));

这可以进一步简化。ToArray和ToString不是必须的,下面的代码可以工作:String nameOfString = String.Join(",", name.Select(x => x)); - nwsmith

2
static void Main(string[] args)
{
   List<string> listStrings = new List<string>(){ "C#", "Asp.Net", "SQL Server", "PHP", "Angular"};
   string CommaSeparateString = GenerateCommaSeparateStringFromList(listStrings);
   Console.Write(CommaSeparateString);
   Console.ReadKey();
}

private static string GenerateCommaSeparateStringFromList(List<string> listStrings)
{
   return String.Join(",", listStrings);  
}

将字符串列表转换为逗号分隔的字符串 C#。


虽然这段代码可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值。请阅读此如何回答以提供高质量的答案。 - thewaywewere

0

如果我在维护你的代码,我更愿意看到这种写法。如果你找到了更快的解决方案,那可能会非常神秘,你应该将它放在一个描述它作用的方法内。

(不使用 ToArray 仍然能正常工作吗?)


1
我只能在字符串数组上使用 string.Join 方法。因此,这是必要的(因为我不使用 .NET 4)。 - Ozkan

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