我有Dictionary<string, string>
形式的键/值集合。
如何将其转换或聚合为属性字符串:
key1="value1" key2="value2" key3="value3"
我相信这可以使用Aggregate函数来实现,但是,我发现这个特定扩展方法的文档令人困惑。非常感谢任何帮助。
答案 0 :(得分: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));
这取决于你发现哪些更具可读性。 (性能差异可以忽略不计。)
答案 1 :(得分: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());
答案 2 :(得分:0)
string.Join(" ", myDict.Select(d => string.Format("{0} = {1}", d.Key, d.Value)))
答案 3 :(得分:0)
所以你想以这种方式将Dictionary输出的键和值作为字符串吗?听起来很容易:
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);