684 Stimmen

Concateniere alle Zeichenfolgen in einer List<string> mithilfe von LINQ

Gibt es einen einfachen LINQ-Ausdruck, um alle Elemente meiner gesamten List-Sammlung zu einem einzelnen string mit einem Trennzeichen zu verkettet?

Was ist, wenn die Sammlung aus benutzerdefinierten Objekten anstelle von string besteht? Stellen Sie sich vor, ich muss auf object.Name verkettet.

45 Stimmen

Warum Linq und nicht string.Join() ?

17 Stimmen

String.Join ist besser, aber ich denke, dass Linq deinen Code Spaß macht, das könnte der Grund sein!

22 Stimmen

String.Join ist besser, weil es einen StringBuilder verwendet und die inhärente O(n^2)-Leistung der wiederholten Verkettung vermeidet.

10voto

Nishanth Shaan Punkte 1382

Sie können einfach verwenden:

List items = new List() { "foo", "boo", "john", "doe" };

Console.WriteLine(string.Join(",", items));

Viel Spaß beim Codieren!

8voto

Jordão Punkte 53117

Ich denke, dass wenn Sie die Logik in einer Erweiterungsmethode definieren, der Code viel lesbarer sein wird:

public static class EnumerableExtensions { 
  public static string Join(this IEnumerable self, string separator) {  
    return String.Join(separator, self.Select(e => e.ToString()).ToArray()); 
  } 
} 

public class Person {  
  public string FirstName { get; set; }  
  public string LastName { get; set; }  
  public override string ToString() {
    return string.Format("{0} {1}", FirstName, LastName);
  }
}  

// ...

List people = new List();
// ...
string fullNames = people.Join(", ");
string lastNames = people.Select(p => p.LastName).Join(", ");

7voto

Peter McG Punkte 18387
List strings = new List() { "ABC", "DEF", "GHI" };
string s = strings.Aggregate((a, b) => a + ',' + b);

4voto

Biddut Punkte 379

Ich habe dies mit LINQ gemacht:

var oCSP = (from P in db.Products select new { P.ProductName });

string joinedString = string.Join(",", oCSP.Select(p => p.ProductName));

2voto

Blechdose Punkte 2022

Fügen Sie String.Join in eine Erweiterungsmethode ein. Hier ist die Version, die ich benutze, die weniger ausschweifend ist als die Version von Jordaos.

  • gibt einen leeren String "" zurück, wenn die Liste leer ist. Aggregate würde stattdessen eine Ausnahme auslösen.
  • wahrscheinlich bessere Leistung als Aggregate
  • ist einfacher zu lesen, wenn sie mit anderen LINQ-Methoden kombiniert werden als nur String.Join()

Verwendung

var myStrings = new List() { "a", "b", "c" };
var joinedStrings = myStrings.Join(",");  // "a,b,c"

Extensionmethods-Klasse

public static class ExtensionMethods
{
    public static string Join(this IEnumerable texts, string separator)
    {
        return String.Join(separator, texts);
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X