使用linq更新xml文件到xml

时间:2012-02-15 16:09:04

标签: c# linq-to-xml

我正在尝试使用GUI中的以下代码更新xml文件。

var Settings = (from e in config.Descendants("Settings")
                from kvpair in e.Elements("add")
                select new
                {
                    Name = kvpair.Attribute("key").Value,
                    Node = kvpair
                }).ToDictionary(x => x.Name, y => y);

Settings["CustomerA"].Node.Attribute.value=txtCustomerA.Text;

上面的代码运行正常:

当我想检查密钥是否存在于字典中时 我正在使用

if(settings.containskey("CustomerA"))
    Settings["CustomerA"].Node.Attribute.value=txtCustomerA.Text;

这也很好。

但是我已经说过要更新的20个条目我正在尝试这种方式以避免每个udpate的if语句

Settings["CustomerA"].Node.Attribute.value=settings.containskey("CustomerA") ?txtCustomerA.Text:null;

但上面的代码抛出异常,字典中不存在密钥???

我只是好奇地为了避免20个陈述而努力工作。如果有人可以指导我,我会很高兴。

1 个答案:

答案 0 :(得分:1)

您可以构建一个映射字典并循环遍历它:

var mappings = new Dictionary<string, Func<string>>
{
    {"CustomerA", () => txtCustomerA.Text},
    {"CustomerB", () => txtCustomerB.Text},
    {"CustomerC", () => txtCustomerC.Text},
    // etc....
};

foreach(var pair in mappings)
{
    Settings[pair.Key] = (Settings.ContainsKey(pair.Key)) ? pair.Value() : null;
}

它仍然不会让你节省大量编码,但它确实避免了20多个if语句。