Преобразовать словарь <string, string> в строку с запятой, разделенную в С#

Простой, чтобы начать день, учитывая 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 переполнен.

Какие альтернативные реализации более сжатые/эффективные? Есть ли в инфраструктуре какие-либо функции, которые помогут?

Ответ 1

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

(И если вы используете .NET 4 или новее, то вы можете опустить окончательный вызов ToArray.)

Ответ 2

Другой вариант - использовать расширение агрегата, а не Join:

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

Ответ 3

Альтернативой 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