C# 的 Ruby #map 和 #join 的整洁等价物
Tidy equivalent of Ruby #map and #join for C#
我从最近的 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# 中实现相同的结果?如何最好地实现这一点?我最关心的问题之一是可读性和可维护性,所以我不想要导致代码被不必要地混淆的东西。
看起来 LINQ Select()
就是您要找的东西:
var result = String.Join(", ",
node.SelectNodes(".//div[@class='email-to']//span")
.Select(o => o.GetAttributeValue("title",""))
);
我从最近的 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# 中实现相同的结果?如何最好地实现这一点?我最关心的问题之一是可读性和可维护性,所以我不想要导致代码被不必要地混淆的东西。
看起来 LINQ Select()
就是您要找的东西:
var result = String.Join(", ",
node.SelectNodes(".//div[@class='email-to']//span")
.Select(o => o.GetAttributeValue("title",""))
);