Pregunta

Replanté mi bucle foreach antes de esto:

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);
}

para esto, usando 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);

Sin embargo, sé que la sección a continuación todavía puede ser refaccionada en un solo bucle pero no sé cómo. por favor ilumíname.

selected.ForEach(x => (mainNode.SetAttribute("name", x.Key)));
selected.ForEach(x => (mainNode.SetAttribute("value", x.Value)));
¿Fue útil?

Solución

Creo que puedes lograr los mismos resultados con:

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

pero, en este caso, elegiría un foreach simple:

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

Otros consejos

tal vez algo como esto

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

¿Alguna posibilidad de que pueda cambiar de XmlDocument a XDocument? LINQ to XML se integra mucho mejor con LINQ, como es de esperar.

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

Y eso es todo, excepto por agregar los nodos al documento o pasarlos a un constructor de XDocument o algo así.

Editar: para aclarar, tu pregunta está etiquetada como < linqtoxml " ;, pero LINQ to XML implica un conjunto específico de clases en el espacio de nombres System.Xml.Linq, como XDocument, XElement y XAttribute. Su código de muestra no utiliza ninguna clase real de LINQ to XML, y le sugiero que si desea usar LINQ para crear su XML, las clases reales de LINQ to XML le servirían mejor que XmlDocument y sus amigos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top