我之前重构了我的foreach循环:
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);
}为此,使用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);然而,我知道下面的部分仍然可以重构为一个单循环,但我不知道如何进行。请给我开导一下。
selected.ForEach(x => (mainNode.SetAttribute("name", x.Key)));
selected.ForEach(x => (mainNode.SetAttribute("value", x.Value)));发布于 2009-05-04 12:23:50
我认为您可以使用以下命令来实现相同的结果:
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);
}发布于 2009-05-04 12:21:28
也许是这样的
selected.ForEach(x =>
{
mainNode.SetAttribute("name", x.Key);
mainNode.SetAttribute("value", x.Value);
});发布于 2009-05-05 02:11:02
你有没有可能从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暗示了System.Xml.Linq名称空间中的一组特定的类,例如XDocument、XElement和XAttribute。您的示例代码没有使用任何实际的LINQ to XML类,我的建议是,如果您想使用LINQ来构建XML,实际的LINQ to XML类将比XmlDocument和其他类更适合您。
https://stackoverflow.com/questions/819824
复制相似问题