嵌套的foreach循环?

时间:2011-08-08 22:19:20

标签: c#-4.0 foreach nested-loops

我有一个应用程序,我需要浏览一堆xml文件并在xml文件中收集它们的链接关系。下面的代码工作得很好并且做了它应该做的事情,但是我得到了一个关于可能的枚举的resharper警告,虽然我想不出任何其他方法去做,代码真的闻起来对我来说。

简而言之,这就是我正在做的事情:

  1. 我收集了xml文件(mapdoc)目录中所有文件的列表。然后来了所有的循环:
  2. 对于列表中的每个文件,我从每个文件中获取所有链接href。
  3. 对于每个hrefs,我再次循环遍历mapdoc中的文件列表(再次循环遍历xFiles,但是使用Linq语句,这就是resharper警告的内容)
  4. 对于链接到的每个文件,我获取文件的id并添加一个id属性对应于链接文件的id的元素。
  5. 在试图解释它时,这对我来说听起来真的很复杂。但它的确有效。我只是想知道我是否错过了一些更优雅,也许更有效的明显方式。这不是一个性能问题,它通常只需要几分之一秒即可完成所有循环,但代码更加简单。

    以下是相关代码的一部分:

    List<XElement> xFiles = 
         (from descendant in mapdoc.Element("mapdoc").Descendants()
          select descendant).ToList();
    
    foreach (var xFile in xFiles)
    {
        //Only check links in xml docs.
        List<string> extensions = new List<string> { ".dita", ".ditamap", ".xml" }; 
        string extension = Path.GetExtension(xFile.Attribute("path").Value);
        if (extensions.Contains(extension))
        {
            var hrefs = GetHrefs(xFile);
            foreach (var href in hrefs)
            {
                var linkedToFiles = xFiles.Where(
                           file => file.Attribute("path").Value == href);
                foreach (var linkedToFile in linkedToFiles)
                    xFile.Add(new XElement("link",
                                new XAttribute("id", 
                                     linkedToFile.Attribute("id").Value)));
            }
        }
    }
    

0 个答案:

没有答案