首页
学习
活动
专区
圈层
工具
发布

LINQ重构
EN

Stack Overflow用户
提问于 2009-05-04 12:11:38
回答 3查看 208关注 0票数 1

我之前重构了我的foreach循环:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);

然而,我知道下面的部分仍然可以重构为一个单循环,但我不知道如何进行。请给我开导一下。

代码语言:javascript
复制
selected.ForEach(x => (mainNode.SetAttribute("name", x.Key)));
selected.ForEach(x => (mainNode.SetAttribute("value", x.Value)));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-04 12:23:50

我认为您可以使用以下命令来实现相同的结果:

代码语言:javascript
复制
        paramsList.ToList().ForEach( e => {
            XmlElement mainNode = xmlDoc.CreateElement("parameter");
            mainNode.SetAttribute("name", e.Key);
            mainNode.SetAttribute("value", e.Value);
            rootNode.AppendChild(mainNode);
        });

但是,在本例中,我会选择一个简单的foreach

代码语言:javascript
复制
        foreach (var e in paramsList)
        {
            XmlElement mainNode = xmlDoc.CreateElement("parameter");
            mainNode.SetAttribute("name", e.Key);
            mainNode.SetAttribute("value", e.Value);
            rootNode.AppendChild(mainNode);
        }
票数 3
EN

Stack Overflow用户

发布于 2009-05-04 12:21:28

也许是这样的

代码语言:javascript
复制
selected.ForEach(x => 
          { 
             mainNode.SetAttribute("name", x.Key);
             mainNode.SetAttribute("value", x.Value);
          });
票数 2
EN

Stack Overflow用户

发布于 2009-05-05 02:11:02

你有没有可能从XmlDocument切换到XDocument?如您所料,LINQ to XML与LINQ的集成要好得多。

代码语言:javascript
复制
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和其他类更适合您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/819824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档