2009-05-04 3 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の要素と同じ数の "parameter"要素が生成されますが、リファクタリングされたコードは常に "name"と "value"属性がlength(paramsList)それに時間。私はそれが正しくリファクタリングされているとは思わない。 –

+0

ええ、あなたは絶対に正しいです。とにかく、私はちょうどbruno condeのコードにコメントしました。そして今はidは私の既存の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.List を作成するために自分のコードにもう負担をかけず、もはや委任しません。 ありがとう! – 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を」タグ付けされていますが、XMLにLINQは、XDocument、XElementオブジェクト、およびXAttributeなどSystem.Xml.Linq名前空間のクラスの特定のセットを意味します。サンプルコードでは実際のLINQ to XMLクラスは使用されていません.LINQを使用してXMLをビルドする場合は、実際のLINQ to XMLクラスがXmlDocumentやフレンドより優れたサービスを提供することをお勧めします。

関連する問題