2012-02-15 4 views
0

내 GUI에서 다음 코드를 사용하여 xml 파일을 업데이트하려고합니다. xml에 linq을 사용하여 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; 

을 사용하고합니다.

하지만 난 내가 각 UDPATE

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

위해 if 문 피할 수 있지만, 위의 코드는 키가 사전에없는 존재 않는 예외를 throw하는 inorder를이 방식으로 시도하고 20 개 항목을 업데이트 할 말있다? ??

나는 20 문장을 피하기 위해 주위를 둘러보고 싶다. 나는 어떤 사람이 나를 인도 할 수 있다면 기쁠 것이다.

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 문을 피하지 :

+0

귀하의 질문에 대한 복제에 모든 경우의 불규칙성이 있다고 가정하고 있습니까? – Aren

+0

@Aren : 예. 오타가 있습니다. – Macnique

답변

1

당신은 그것을 통해 매핑 사전 및 루프를 구축 할 수 있습니다.

관련 문제