我正在尝试使用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个陈述而努力工作。如果有人可以指导我,我会很高兴。
答案 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
语句。