我需要将一个集合转换为包含集合<string,string>中所有值的单个字符串,如KeyValueKeyValue ...但我该如何有效地执行此操作?
我现在这样做了:
parameters = string.Join("", requestParameters.Select(x => string.Concat(x.Key, x.Value)));
Run Code Online (Sandbox Code Playgroud)
但不确定这是最好的方法,字符串构建器会更好吗?我猜这个系列最多包含10对.
有了这么小的集合,没有太多的性能问题,但我可能只是使用StringBuilder来附加所有的值.
像这样:
var sb = new Text.StringBuilder;
foreach (var item in requestParameters)
{
sb.AppendFormat("{0}{1}", item.Key, item.Value);
}
var parameters = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
string.Join过去并不是真正的最佳选择,因为它只接受string[]或object[]参数,要求任何select样式的查询需要完全评估并首先放入数组.
.NET 4.0带来了一个接受的重载IEnumerable<string> - 这就是你正在使用的 - 甚至是一个接受任何的重载 IEnumerable<T>.这些绝对是您最好的选择,因为他们现在是BCL的一部分.
顺便说一句,为Reflector中的第一个重载打开源代码显示的代码与davisoa建议的内容非常接近:
public static string Join(string separator, IEnumerable<string> values)
{
if (values == null)
{
throw new ArgumentNullException("values");
}
if (separator == null)
{
separator = Empty;
}
using (IEnumerator<string> enumerator = values.GetEnumerator())
{
if (!enumerator.MoveNext())
{
return Empty;
}
StringBuilder builder = new StringBuilder();
if (enumerator.Current != null)
{
builder.Append(enumerator.Current);
}
while (enumerator.MoveNext())
{
builder.Append(separator);
if (enumerator.Current != null)
{
builder.Append(enumerator.Current);
}
}
return builder.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,如果您要更改此代码以使用a StringBuilder,那么您只需要重写MS已经为您编写的内容.
| 归档时间: |
|
| 查看次数: |
10897 次 |
| 最近记录: |