在c#中构建字符串的优雅方式

Ben*_*nny 10 c# stringbuilder

使用keyvaluepair构建的字符串是这样的:"name1 = v1&name2 = v2&name3 = v3"

我在做什么:

var sb = new StringBuilder();

foreach (var name in nameValues)
{
            sb.AppendFormat("{0}={1}&", name.Key, name.Value);
 } 

//remove last '&' sign, this is what i think is ugly
sb.ToString().Remove(lastIndex);
Run Code Online (Sandbox Code Playgroud)

任何优雅的方法,以避免'&'符号的最后删除声明?

Tam*_*ege 18

var joined =
    String.Join("&", nameValues.Select(n => n.Key + "=" + n.Value).ToArray());
Run Code Online (Sandbox Code Playgroud)

鉴于我们没有连接到一个大字符串(我们生成许多小字符串),在这种情况下,连接不会产生任何性能损失.并且在.NET中,字符串的长度前缀无论如何,因此整个连接性能问题与C中的相关性较低.String.Join()也非常快,比StringBuilder更快.

TLDR:使用String.Join()


Rub*_*ias 5

看看这里:如何在C#中为URL构建查询字符串?; 引用:

private string ToQueryString(NameValueCollection nvc)
{
    return "?" + 
        string.Join("&", 
            Array.ConvertAll(
                nvc.AllKeys, 
                key => String.Format("{0}={1}", HttpUtility.UrlEncode(key),
                HttpUtility.UrlEncode(nvc[key]))));
}
Run Code Online (Sandbox Code Playgroud)