适用于C#的Ruby #map和#join相当整齐

时间:2017-03-21 01:52:33

标签: c# html-agility-pack map-function

我从最近的C#项目中得到了以下简单示例:

HtmlAgilityPack.HtmlNodeCollection toNodes = node.SelectNodes(@".//div[@class='email-to']//span");
string toString = "";
foreach(HtmlAgilityPack.HtmlNode toNode in toNodes)
{
  toString += toNode.Attributes["title"].Value + ", ";
}
toString = toString.Substring(0, toString.Length - 2);

如果我在Ruby中做同样的事情,我会这样做:

to_string = node.select_nodes(".//div[@class='email-to']//span").map{ |to_node|
  to_node.attributes["title"].value
}.join(', ')

我发现自己想要在C#中使用map等效几次,但还没找到合适的东西。我找到了Enumerable.Aggregate文档,虽然它看起来像我想要的,但我无法弄清楚如何将其应用到上面的例子中。

我也看到过使用LINQ的例子,并且无法理解如何将其他示例翻译成上述内容。

与我所做的相比,在C#中是否有更简洁的方法来实现相同的结果,以及如何最好地实现这一目标?我最关心的一个问题是可读性和可维护性,所以我不想要一些会导致代码被不必要地混淆的东西。

1 个答案:

答案 0 :(得分:3)

看起来LINQ Select()正是您正在寻找的:

var result = String.Join(", ", 
                node.SelectNodes(".//div[@class='email-to']//span")
                    .Select(o => o.GetAttributeValue("title",""))
            );