Задача: можете ли вы сделать эту простую функцию более элегантной с помощью C # 4.0

Когда я взламывал наш код, я только что заметил эту функцию. Он преобразует IDictionary (параметры - переменная экземпляра) в строку XML.

Это не что иное, как любопытство с моей стороны :-).

Можно ли написать намного меньше кода с использованием C # 4.0? Правило: никаких внешних библиотек, кроме BCL .Net Framework.

Чтобы усложнить задачу, я не помещаю сюда спецификацию входного словаря, так как вы сможете решить это из кода.

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;
}

Позвольте мне добавить еще несколько мыслей.

Для меня:

  • меньше значит лучше, но кратко - плохо
  • больше типов - это хорошо, но тривиальные типы кажется неприятным
  • возможность повторного использования - это хорошо
10
задан Preet Sangha 16 August 2011 в 11:04
поделиться