我以前从来没有遇到过这种情况,但我现在遇到了,而且很惊讶的是,我找不到一种真正简单的方法来将IEnumerable<char>
转换为string
。
我能想到的最好的方法是string str = new string(myEnumerable.ToArray());
,但对我来说,这似乎会创建一个新的char[]
,然后从它创建一个新的string
,这似乎很昂贵。
我本以为这会是.NET框架中的常见功能。有没有更简单的方法来做这件事?
对于那些感兴趣的人,我想使用它的原因是使用LINQ来过滤字符串:
string allowedString = new string(inputString.Where(c => allowedChars.Contains(c)).ToArray());
发布于 2012-07-26 00:19:38
从.NET 4开始,许多字符串方法都以IEnumerable作为参数。
string.Concat(myEnumerable);
发布于 2014-10-24 12:31:15
以下是StringBuilder答案的一个更简洁的版本:
return charSequence.Aggregate(new StringBuilder(), (seed, c) => seed.Append(c)).ToString();
我使用Jeff Mercado使用的相同测试对此进行了计时,在相同的300个字符序列(32位发布版本)上进行1,000,000次迭代,比更明确的测试慢了1秒:
static string StringBuilderChars(IEnumerable<char> charSequence)
{
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c);
}
return sb.ToString();
}
所以,如果你是累加器的粉丝,那就开始吧。
发布于 2014-08-21 21:21:23
另一种可能性是使用
string.Join("", myEnumerable);
我没有测量性能。
https://stackoverflow.com/questions/11654190
复制相似问题