Question

J'ai refactoré ma boucle foreach à partir de ceci auparavant:

foreach (KeyValuePair[string, string] param in paramsList)
{
    XmlElement mainNode = xmlDoc.CreateElement("parameter");
    mainNode.SetAttribute("name", param.Key);
    mainNode.SetAttribute("value", param.Value);
    rootNode.AppendChild(mainNode);
}

pour cela, en utilisant LINQ:

XmlElement mainNode = xmlDoc.CreateElement("parameter");
var selected = paramsList.AsEnumerable().Select(param => param).ToList();
selected.ForEach(x => (mainNode.SetAttribute("name", x.Key)));
selected.ForEach(x => (mainNode.SetAttribute("value", x.Value)));
rootNode.AppendChild(mainNode);

Cependant, je sais que la section ci-dessous peut toujours être transformée en une seule boucle mais je ne sais pas comment. s'il vous plaît éclaire-moi.

selected.ForEach(x => (mainNode.SetAttribute("name", x.Key)));
selected.ForEach(x => (mainNode.SetAttribute("value", x.Value)));
Était-ce utile?

La solution

Je pense que vous pouvez obtenir les mêmes résultats avec:

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

mais, dans ce cas, je choisirais un simple foreach :

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

Autres conseils

peut-être quelque chose comme ça

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

Avez-vous une chance de passer de XmlDocument à XDocument? LINQ to XML s'intègre beaucoup mieux à LINQ, comme on pouvait s'y attendre.

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

Et c'est tout, sauf pour ajouter les nœuds au document ou pour les transmettre à un constructeur XDocument ou quelque chose du genre.

Modifier: pour clarifier, votre question est étiquetée "linqtoxml", mais LINQ to XML implique un ensemble spécifique de classes dans l'espace de noms System.Xml.Linq, telles que XDocument, XElement et XAttribute. Votre exemple de code n'utilise aucune classe LINQ to XML, et je suggère que si vous souhaitez utiliser LINQ pour créer votre code XML, les classes LINQ to XML vous serviraient mieux que XmlDocument et ses amis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top