Как я взломал нашу базу кода, я просто заметил эту функцию. Он преобразует IDictionary<string, object>
(Parameters - переменную экземпляра) в строку XML.
Это не что иное, как любопытство с моей стороны:-).
Так может ли он быть написан с гораздо меньшим количеством кода с использованием С# 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;
}
Позвольте мне добавить еще несколько мыслей.
Мне:
- меньше, но кратковременно плохо.
- больше типов прекрасны, но тривиальные типы кажутся вонючими.
- возможность повторного использования