2011-10-07 41 views

回答

7

我會使用:

.NET 4:

var text = string.Join(" ", 
       dictionary.Select(pair => string.Format("{0}={1}", 
           pair.Key, pair.Value)); 

.NET 3.5(其中string.Join有少量過載)

var text = string.Join(" ", 
       dictionary.Select(pair => string.Format("{0}={1}", 
           pair.Key, pair.Value) 
         .ToArray()); 

如果您需要做任何轉義,做它在撥打string.Format。當然,你並不需要使用string.Format - 你可以使用:

var text = string.Join(" ", dict.Select(pair => pair.Key + "=" + pair.Value)); 

這要看你找到更易讀。 (性能差異可以忽略不計。)

0
string.Join(" ", myDict.Select(d => string.Format("{0} = {1}", d.Key, d.Value))) 
3
var dict = new Dictionary<string, string> 
       { 
        {"1", "first"}, 
        {"2", "second"} 
       }; 

var result = dict.Aggregate(new StringBuilder(), 
          (sb, kvp) => sb.AppendFormat("{0}=\"{1}\" ", kvp.Key, kvp.Value), 
          sb => sb.ToString()); 
+0

+1顯示瞭如何使用Aggregate完成此操作。我將與Skeet的答案一起去,因爲它能很好地處理尾部空間,因爲它對初學者更容易理解。儘管非常感謝! –

0

所以,你想要的字典輸出以這種方式字符串鍵和值?聽起來很簡單:

var myDictionary = new Dictionary<string,string>(); 
//populate Dictionary 

//a Dictionary<string,string> is an IEnumerable<KeyValuePair<sring,string>> 
//so, a little Linq magic will work wonders 
var myAttributeString = myDictionary.Aggregate(new StringBuilder(), (s, kvp) => s.Append(kvp.Key + "=\"" + (kvp.Value ?? String.Empty) + "\" ")); 

結果就會像一個在你的問題的字符串,後面有個空格(在XML是不是一個大問題,但你可以修剪,如果你想)。

您也可以使用.NET的XML特性將值作爲元素的屬性字符串實際放入XML中。屬性字符串將以文檔中的XML元素結尾,這可能是無論如何需要去的地方:

XMLDocument doc = new XMLDocument() 
XMLElement myElement = doc.CreateElement("myElement") 

foreach(var kvp in myDictionary) 
    myElement.SetAttribute(kvp.Key, kvp.Value); 
+1

我儘量避免使用重複的字符串連接,雖然...一個StringBuilder作爲aggrgation類型會更好的IMO。 –

+0

是的。編輯... – KeithS

相關問題