2012-02-14 131 views
1

使用将customers.xml文件中的某些值读取到UI的应用程序。linq to xml检查密钥是否存在?

的LINQ to XML代码:

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; 

我能够通过上面的代码来获得值到GUI从XML文件中。

我的问题是,当我注释掉特定客户的XML文件中的任何元素或数据出现错误“给定的键不存在在词典中”

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

回答

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

编辑:

你可以通过访问键的属性集合键循环:

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

你也可以使用LINQ筛选出你所需要的:

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

这个工作太:txtLName.Text = Settings.ContainsKey(“CustomerA”)?设定[ “CustomerA”] Node.attribute( “值”)值:。NULL; – Macnique 2012-02-14 19:52:16

+0

我想知道这对于两个或三个值是否足够好,如果我想要在GUI中显示更多的键,该怎么办? – Macnique 2012-02-14 19:53:10

+0

@Macnique:对,但我提供更干净的代码(以我个人的观点) – sll 2012-02-14 19:53:45

4

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

2

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

但是,您可能想问自己,为什么钥匙不在那里以及它是否应该在那里。

+0

我不知道这对于两个或三个值来说足够好了如果我想要在GUI中显示更多的键,那么该怎么办?有没有一种方法可以循环查看字典并找出哪些存在以及哪些不存在? – Macnique 2012-02-14 19:53:54

+0

是的,您可以循环遍历要检查的键值列表,然后检查每个键的ContainsKey的返回值。您还可以使用'dictionary.Keys'获取字典中所有键的列表,并通过循环来获取字典中键的实际值。 – David 2012-02-14 20:00:23