2010-10-06 2 views
88

un simple pour commencer la journée, étant donné un Dictionary<string, string> comme suit:Convertir Dictionnaire <string, string> à virgules chaîne séparée en C#

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

Je souhaite créer une chaîne: "A=1;B=2;C=3;D=4"

Un exemple la mise en œuvre:

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(); 

Notez le dictionnaire est susceptible d'avoir moins de 10 articles ce qui laisse croire qu'un StringBuilder est surpuissant. Quelles implémentations alternatives sont plus succinctes/efficaces?

Le cadre a-t-il des caractéristiques qui aideront?

Répondre

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

(Et si vous utilisez .NET 4, ou plus récent, vous pouvez ignorer l'appel ToArray final.)

+1

Nice et simple - merci! – Iain

+0

Nice :-) Cependant, j'utiliserais String.Format ("{0} = {1}", x.Key, x.Value) au lieu de l'opérateur + –

+0

Modifié selon les commentaires. –

25

Une autre option est d'utiliser l'extension globale plutôt que de rejoindre:

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

style linq parfait! – menkow

Questions connexes