2012-02-14 36 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