如何将列表转换为C#中的字符串?
当我toString在List对象上执行时,我得到:
System.Collections.Generic.List`1 [System.String]
我以前从来没有偶然发现过这个问题,但我现在已经感到惊讶,因为我找不到一个非常简单的方法来转换IEnumerable<char>为a string.
我能想到的最好的方法是string str = new string(myEnumerable.ToArray());,但是,对我来说,似乎这会创造一个新的char[],然后string从中创造一个新的,这看起来很昂贵.
我认为这将是.NET框架内置的常用功能.有更简单的方法吗?
对于那些感兴趣的人,我想使用它的原因是使用LINQ来过滤字符串:
string allowedString = new string(inputString.Where(c => allowedChars.Contains(c)).ToArray());
编辑发布.Net Core 2.1
重复测试.Net Core 2.1的发布,我得到这样的结果
"Concat"的1000000次迭代耗时842ms.
"新字符串"的1000000次迭代耗时1009ms.
"sb"的1000000次迭代耗时902ms.
简而言之,如果您使用.Net Core 2.1或更高版本,Concat则为王.
我编辑了这个问题,以纳入评论中提出的有效点.
我正在思考我对前一个问题的回答,我开始怀疑,是这样,
return new string(charSequence.ToArray());
将IEnumerable<char>a 转换为a 的最佳方法string.我做了一点搜索,发现这里已经提出了这个问题.那个答案断言,
string.Concat(charSequence)
是一个更好的选择.在回答这个问题后,StringBuilder还提出了一种列举方法,
var sb = new StringBuilder();
foreach (var c in chars)
{
    sb.Append(c);
}
return sb.ToString();
虽然这可能有点笨拙但我把它包括在内是为了完整性.我决定我应该做一点测试,使用的代码在底部.
当在发布模式下构建时,通过优化,并在没有附加调试器的情况下从命令行运行,我得到这样的结果.
"Concat"的1000000次迭代耗时1597ms.
"新字符串"的1000000次迭代耗时869ms.
"sb"的1000000次迭代耗时748ms.
据我估算,它的new string(...ToArray())速度接近该string.Concat方法的两倍.该StringBuilder是稍快,但仍然是尴尬使用,但可能会延长.
我应该坚持,new string(...ToArray())还是有什么我想念的?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
class Program …我有一个char[] salary包含来自a的数据string.我想转换char[] salary为float,但我正在尝试的方法似乎极其缓慢,这是:
float ff = float.Parse(new string(salary));
根据Visual Studio的Performance Profiler,这会占用过多的处理:
所以我想知道是否有更快的方法来做到这一点,因为这里的表现是重点.在char[]被格式化,像这样:
[ '1', '3, '2', ',' '2', '9']
并且基本上是一个类似JSON的浮点数转换为适合的每个数字(和逗号)char[].
编辑:
我已经重新格式化了代码,似乎性能命中实际上是从转换char[]到string,而不是从解析string到float.