我有一個Dictionary<string, string>
形式的鍵/值的集合。如何將Dictionary <string,string>轉換爲LINQ中的屬性字符串?
你會如何轉換或聚集到這個屬性字符串:
key1="value1" key2="value2" key3="value3"
我相信這可以通過使用聚合函數來實現,不過,我覺得在這個特定的擴展方法混亂的文檔。任何幫助深表感謝。
我有一個Dictionary<string, string>
形式的鍵/值的集合。如何將Dictionary <string,string>轉換爲LINQ中的屬性字符串?
你會如何轉換或聚集到這個屬性字符串:
key1="value1" key2="value2" key3="value3"
我相信這可以通過使用聚合函數來實現,不過,我覺得在這個特定的擴展方法混亂的文檔。任何幫助深表感謝。
我會使用:
.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));
這要看你找到更易讀。 (性能差異可以忽略不計。)
string.Join(" ", myDict.Select(d => string.Format("{0} = {1}", d.Key, d.Value)))
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());
所以,你想要的字典輸出以這種方式字符串鍵和值?聽起來很簡單:
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);
我儘量避免使用重複的字符串連接,雖然...一個StringBuilder作爲aggrgation類型會更好的IMO。 –
是的。編輯... – KeithS
+1顯示瞭如何使用Aggregate完成此操作。我將與Skeet的答案一起去,因爲它能很好地處理尾部空間,因爲它對初學者更容易理解。儘管非常感謝! –