将Dictionary <string,string>转换为c#</string,string>中以分号分隔的字符串

时间:2010-10-06 11:00:00

标签: c#

简单的开始一天,给出Dictionary<string, string>如下:

var myDict = new Dictionary<string, string>();
myDict["A"] = "1";
myDict["B"] = "2";
myDict["C"] = "3";
myDict["D"] = "4";

我希望创建一个字符串:"A=1;B=2;C=3;D=4"

示例实现:

var myStringBuilder = new StringBuilder();
bool first = true;
foreach (KeyValuePair<string, string> pair in myDict)
{
    if (first)
    {
        first = false;
    }
    else
    {
        myStringBuilder.Append(";");
    }

    myStringBuilder.AppendFormat("{0}={1}", pair.Key, pair.Value);
}

var myDesiredOutput = myStringBuilder.ToString();

请注意,字典可能少于10个项目,这表明StringBuilder过度。

哪些替代实施更简洁/高效?框架是否有任何有用的功能?

4 个答案:

答案 0 :(得分:247)

string s = string.Join(";", myDict.Select(x => x.Key + "=" + x.Value).ToArray());

(如果你使用的是.NET 4或更新版本,那么你可以省略最后的ToArray电话。)

答案 1 :(得分:36)

另一个选择是使用Aggregate扩展而不是Join:

String s = myDict.Select(x => x.Key + "=" + x.Value).Aggregate((s1, s2) => s1 + ";" + s2);

答案 2 :(得分:0)

答案 3 :(得分:0)

string.format的替代方法是对字典中的每个值使用string.Join

string myDesiredOutput = string.Join(";", myDict.Select(x => string.Join("=", x.Key, x.Value)));

打印:

A=1;B=2;C=3;D=4