linq to xml检查密钥是否存在?

时间:2012-02-14 19:36:24

标签: c# linq-to-xml

处理从customers.xml文件中读取某些值到UI的应用程序。

Linq to xml code:

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

txtFName.Text==Settings["CustomerA"].Node.attribute("value").Value;
txtLName=Settings["CustomerB"].Node.attribute("value").Value;

我可以通过上面的代码从XMl文件中获取GUI值。

我的问题是当我从特定客户的xml文件中注释掉任何元素或数据时,我得到错误“字典中没有给定的密钥”

如果只读取该值或者获得下一个值,我如何动态检查字典中是否存在密钥?

3 个答案:

答案 0 :(得分:4)

您正在寻找ContainsKey()TryGetValue()方法。

答案 1 :(得分:2)

检查字典中是否存在键的“正确”方法是使用ContainsKey函数。 dictionary.ContainsKey(keyValue);

但是,你可能想问问自己为什么关键不在那里以及是否应该在那里。

答案 2 :(得分:1)

if (Settings.ContainsKey("CustomerA"))
{
   txtLName.Text = Settings["CustomerA"].Node.attribute("value").Value;
}

编辑:

您可以循环访问Keys属性集合的键:

foreach (var key in Settings.Keys)
{
   // ..
}

您也可以使用LINQ过滤掉您需要的内容:

IList<string> filteredKeys = new List<string> { "A", "B" };
Settings.Where(kv => filteredKeys.Contains(kv.Key));