使用linq将xml文件更新为xml

本文关键字:xml 更新 文件 使用 linq | 更新日期: 2023-09-27 18:24:48

我正在尝试使用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 if语句。如果有人能指导我,我会很高兴。

使用linq将xml文件更新为xml

您可以构建一个映射字典并在其中循环:

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语句。