2009-05-04 4 views
1

나는 전에에서 내 foreach 루프를 리팩토링 나는 어떻게하는지 모른다. 제발 저를 계몽하십시오.LINQ 리팩토링

selected.ForEach(x => (mainNode.SetAttribute("name", x.Key))); 
selected.ForEach(x => (mainNode.SetAttribute("value", x.Value))); 
+0

아니요 : (param => param) 을 (를) 선택 하시겠습니까? –

+0

또한 원본 코드는 paramsList에 요소가있는만큼 많은 "매개 변수"요소를 생성하지만 리팩토링 된 코드는 항상 "name"및 "value"특성이 설정된 길이 (paramsList) 인 정확히 하나의 "매개 변수"요소를 생성합니다. 그것에 시간. 나는 그것이 당신이 정확하게 리팩터링했다고 생각하지 않는다. –

+0

예, 당신은 절대적으로 옳습니다. 어쨌든, 난 그냥 브루노 콘데의 코드에 댓글을 달았고 이제는 기존의 foreach 루프를 대체하지 않습니다. – grayman

답변

3

같은 :

:

 paramsList.ToList().ForEach(e => { 
      XmlElement mainNode = xmlDoc.CreateElement("parameter"); 
      mainNode.SetAttribute("name", e.Key); 
      mainNode.SetAttribute("value", e.Value); 
      rootNode.AppendChild(mainNode); 
     }); 

하지만,이 경우에, 나는 foreach 간단한을 선택할 것을

 foreach (var e in paramsList) 
     { 
      XmlElement mainNode = xmlDoc.CreateElement("parameter"); 
      mainNode.SetAttribute("name", e.Key); 
      mainNode.SetAttribute("value", e.Value); 
      rootNode.AppendChild(mainNode); 
     } 
+0

나는 .. 이미 그렇게 할 수 있었다. 코드를 보면 간단한 foreach 루프를 선택할 수 있습니다. 그것은 단순한 foreach 루프와 비교할 때 Generic을 만들기 위해 코드를 더 이상 사용하지 않기 때문입니다. 목록을 만들고 더 이상 위임하지 않습니다. 감사합니다. – grayman

2

어쩌면 내가 당신과 같은 결과를 얻을 수 있다고 생각이

selected.ForEach(x => 
      { 
      mainNode.SetAttribute("name", x.Key); 
      mainNode.SetAttribute("value", x.Value); 
      }); 
0

XmlDocument에서 XDocument로 전환 할 수 있습니까? LINQ to XML은 LINQ와 훨씬 잘 통합됩니다.

var nodes = from pair in paramsList 
      select new XElement("parameter", 
           new XAttribute("name", pair.Key), 
           new XAttribute("value", pair.Value)); 

그리고 그 문서에 노드를 추가하거나하여 XDocument 생성자 또는 무언가로 전달을 제외하고, 그것 뿐이다.

편집 : 질문에 "linqtoxml"태그가 지정되어 있지만 LINQ to XML은 XDocument, XElement 및 XAttribute와 같은 System.Xml.Linq 네임 스페이스의 특정 클래스 집합을 의미합니다. 샘플 코드는 실제 LINQ to XML 클래스를 사용하지 않으며, LINQ를 사용하여 XML을 빌드하려는 경우 실제 LINQ to XML 클래스가 XmlDocument 및 친구들보다 나은 서비스를 제공 할 것을 제안합니다.