使用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语句。如果有人能指导我,我会很高兴。
您可以构建一个映射字典并在其中循环:
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
语句。