2012-02-14 8 views
1

customers.xmlファイルからUIに値を読み取るアプリケーションの操作。 XMLコードへlinqがxmlにキーが存在するかどうかを確認しますか?

のLINQ:

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ファイルから任意の要素やデータをコメントアウトするとき、私は動的にキーが存在するかどうかを確認するにはどうすればよい

「を与えられたキーが辞書に存在しない」であります辞書に入ればその値だけを読むか、そうでなければ次の値を得ますか?

答えて

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

EDIT:

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( "value")。値:Null。 – Macnique

+0

これは、2つまたは3つの値のために十分だと思います。GUIにもっと多くのキーを表示したいのですが? – Macnique

+0

@Macnique:そうだが、私はよりクリーンなコードを優先する(私の個人的な意見では) – sll

4

あなたはContainsKey()またはTryGetValue()メソッドを探しています。

2

辞書にキーが存在するかどうかを確認する「適切な」方法は、ContainsKey関数を使用することです。 dictionary.ContainsKey(keyValue);

ただし、キーが存在しない理由と、そのキーが存在する必要があるかどうかを確認することができます。

+0

かしら

あなたがキーにプロパティコレクションにアクセスキーをループはできますこれは、2つまたは3つの値のために十分です。GUIに表示するキーがもっと必要な場合はどうなりますか?辞書をループして存在するものと存在しないものを見つける方法はありますか? – Macnique

+0

はい、確認したいキー値のリストをループし、それぞれのキーの戻り値を確認することで、これを行うことができます。 'dictionary.Keys'を使用して辞書のすべてのキーのリストを取得し、それをループして辞書のキーの実際の値を取得することもできます。 – David

関連する問題