2012-02-15 20 views
0

GUIから次のコードを使用してxmlファイルを更新しようとしています。linqをxmlに使用して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; 

を使用しています 辞書に存在するかどうかをチェックしたいときに。

しかし、if文の各UDPATE

Settings["CustomerA"].Node.Attribute.value=settings.containskey("CustomerA") ?txtCustomerA.Text:null; 

のために避けるために、順序どおり私は20個のエントリは、私がこのようにしようとしています更新すると言っているが、上記のコードが例外をスローキーが辞書に存在しないのですか? ??

私は20件のif文を避けるために回避策を探していました。何人かが私を導くことができれば嬉しいです。あなたはそれを介してマッピング辞書やループを構築することができます

+0

私はあなたの質問の複製にすべてのケースの不規則性があると仮定していますか? – Aren

+0

@Aren:はい、タイプミスがあります – Macnique

答えて

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文を避けるん。

関連する問題