我有以下数据:
Dictionary<string,string> dctParameters = new Dictionary(){
{"a",var1},{"b",var2},{"c",var3},....
}
Run Code Online (Sandbox Code Playgroud)
我想将"dctParameters"加入一个查询字符串.
以下方式中最快/最好的是什么?你能想到更好的方法吗?
第一种方法:
StringBuilder data = new StringBuilder();
string result = dctParameters.Aggregate(data, (x, pair) => data.Append(pair.Key).Append("=").Append(pair.Value).Append("&")).ToString();
Run Code Online (Sandbox Code Playgroud)
第二种方法:
StringBuilder data = new StringBuilder();
foreach (var item in dctParameters)
{
data.Append(string.Format("{0}={1}&",item.Key, item.Value));
}
string result = data.ToString();
Run Code Online (Sandbox Code Playgroud)
第三种方法:
StringBuilder data = new StringBuilder();
foreach (var item in dctParameters)
{
data.Append(item.Key).Append("=").Append(item.Value).Append("&");
}
string result = data.ToString();
Run Code Online (Sandbox Code Playgroud)
gre*_*ade 10
如何将扩展方法作为Eric建议的变体:
public static string ToQueryString(this Dictionary<string, string> dict)
{
return '?' + string.Join("&", dict.Select(p => p.Key + '=' + p.Value).ToArray());
}
Run Code Online (Sandbox Code Playgroud)
例如:
dctParameters.ToQueryString();
Run Code Online (Sandbox Code Playgroud)
考虑到这种过程不太可能使服务器陷入困境,任何实现的性能成本都不值得失眠.问题是(如你所说)更好而不是更快,而你似乎追求的是一种优雅的方法,而不是最少的CPU周期.
假设当你说"querystring"时,你指的是在URL中传递的参数,那么:
怎么样:
String.Join("&", dic.Select(kv => kv.Key + "=" + kv.Value).ToArray());
Run Code Online (Sandbox Code Playgroud)
说实话,在我看来,你正试图过早地优化.
我不相信这些之间会有显着差异,但您可以使用计时器对它们进行基准测试.因此,我建议选择一个您认为对于可能需要维护代码的开发人员最具可读性的那个.