Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串列表转换为一个字符串_C#_String_Performance_Functional Programming - Fatal编程技术网

C# 将字符串列表转换为一个字符串

C# 将字符串列表转换为一个字符串,c#,string,performance,functional-programming,C#,String,Performance,Functional Programming,假设您有一个: List<string> los = new List<string>(); List los=新列表(); 在这个疯狂的函数世界里,我们生活在这些日子里,哪一个最适合通过连接以下内容来创建一个字符串: String.Join(String.Empty, los.ToArray()); StringBuilder builder = new StringBuilder(); los.ForEach(s => builder.Append(s))

假设您有一个:

List<string> los = new List<string>();
List los=新列表();
在这个疯狂的函数世界里,我们生活在这些日子里,哪一个最适合通过连接以下内容来创建一个字符串:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);
String.Join(String.Empty,los.ToArray());
StringBuilder=新的StringBuilder();
los.ForEach(s=>builder.Append(s));
字符串显示=服务水平聚合((a,b)=>a+b);
或者是普通的老式架线工


或者有更好的方法吗?

我会选择选项a:

String.Join(String.Empty, los.ToArray());
我的推理是因为Join方法就是为此而编写的。事实上,如果你看看Reflector,你会发现不安全的代码被用来真正优化它。另外两个也可以工作,但我认为Join函数就是为了这个目的而编写的,我猜是最有效的。但我可能错了

根据@Nuri YILMAZ,不带
.ToArray()
,但这是.NET 4+:

String.Join(String.Empty, los);
我的票是字符串。加入

不需要创建lambda求值和临时函数,更少的函数调用,更少的堆栈推送和弹出。

String.Join()的实现速度非常快,而且由于您已经有了一组相关字符串,因此可能是最佳选择。最重要的是,它高喊着“我加入了一个字符串列表!”总是很好

string.Concat(los.ToArray());

如果只想连接字符串,请使用string.Concat()而不是string.Join()。

如果使用.net 4.0,则可以使用排序器方式:

String.Join<string>(String.Empty, los);
String.Join(String.Empty,los);

GA!我一开始甚至没有看到这个选项——直接读过去。比StringBuilder快3倍?哇,我以为会快一点,但没意识到会快多少。不过这是有道理的,它是在使用指针的不安全代码中完成的,所以。。。。。有道理,很好!唯一的备注:Join不需要los.ToArray(),因为List可以强制转换IEnumarable。@Nuri:这个问题是在.NET4发布之前的08年提出的。接受IEnumerable的重载是在.Net 4.String.Join中与String.Concat一起添加的。例如:“String.Concat(“{”,String.Join(“,”,m_Data),“}”);”看起来.NET4还将包含一个string.Join(string,IEnumerable),允许您跳过ToArray()
los.Aggregate((current, next) => current + "," + next);