2017-03-21 1 views
0

ich das folgende einfache Beispiel aus einem Projekt der letzten C# habe:Tidy äquivalent von Ruby #map und #join für 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); 

Wenn ich das gleiche in Ruby tat, würde ich tun:

Ich habe mich für eine map Entsprechung einige Male in C# gefunden, aber habe noch nichts passendes gefunden. Ich habe die Enumerable.Aggregate Dokumentation gefunden und während es aussieht, was ich vielleicht möchte, konnte ich nicht herausfinden, wie man das auf das obige Beispiel anwendet.

Ich habe auch Beispiele gesehen, LINQ zu verwenden, und ich konnte mir nicht vorstellen, wie man andere Beispiele in so etwas wie das oben beschriebene übersetzt.

Gibt es einen besseren Weg, um das gleiche Ergebnis in C# im Vergleich zu dem, was ich getan habe, zu erzielen, und wie kann ich das am besten erreichen? Eines meiner größten Anliegen ist Lesbarkeit und Wartungsfreundlichkeit, daher möchte ich nichts, was dazu führt, dass der Code unnötig verschleiert wird.

Antwort

3

Sieht aus wie LINQ Select() ist das, was Sie suchen:

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