【发布时间】:2011-10-27 15:02:02
【问题描述】:
当我破解我们的代码库时,我注意到了这个函数。它将IDictionary<string, object>(参数 - 实例变量)转换为 XML 字符串。
这只是我的好奇心 :-) 。
那么它可以使用 C# 4.0 用更少的代码编写吗?规则:除了 .Net Framework BCL 之外没有外部库。
为了使它更具挑战性,我没有将输入字典规范放在这里,因为您应该能够从代码中解决它。
public string ConvertToXml() {
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version='1.0' encoding='utf-8'?><sc/>");
foreach (KeyValuePair<string, object> param in Parameters) {
XmlElement elm = doc.CreateElement("pr");
if (param.Value is int || param.Value is Int32 || param.Value is Int16 || param.Value is Int64) {
elm.SetAttribute("tp", "int");
} else if (param.Value is DateTime?){
elm.SetAttribute("tp", "datetime");
} else {
elm.SetAttribute("tp", "string");
}
elm.SetAttribute("nm", param.Key);
if (param.Value is DateTime?) {
DateTime? dateTime = param.Value as DateTime?;
elm.SetAttribute("vl", dateTime.Value.ToString("o"));
} else{
elm.SetAttribute("vl", param.Value.ToString());
}
doc.FirstChild.NextSibling.AppendChild(elm);
}
return doc.OuterXml;
}
让我补充一些想法。
对我来说:
- 少即是多,但简洁是不好的
- 更多的类型还好,但琐碎的类型看起来很臭
- 复用性好
【问题讨论】:
-
如果这是一个挑战,你应该提供一些赏金:)
-
我愿意。我不知道如何在开始时添加赏金 - 我以为你必须等待。我该怎么办?
-
嗯,你是对的,你需要等待 2 天。 :0 我的坏。期待看到人们提出的解决方案^^
-
只是关于代码的注释:
int和Int32完全是一回事。 -
我没想到你真的会悬赏它。但你做到了。但它是一个相当骨瘦如柴的,虽然你不觉得吗? :D