30 Stimmen

Sammlung von Objekten zu einer kommagetrennten Zeichenkette zusammenfügen

An vielen Stellen in unserem Code haben wir Sammlungen von Objekten, aus denen wir eine kommagetrennte Liste erstellen müssen. Der Typ der Sammlung variiert: Es kann eine DataTable sein, aus der wir eine bestimmte Spalte benötigen, oder eine List<Customer>, usw.

Jetzt durchlaufen wir die Sammlung in einer Schleife und verwenden z. B. die String-Verkettung:

string text = "";
string separator = "";
foreach (DataRow row in table.Rows)
{
    text += separator + row["title"];
    separator = ", ";
}

Gibt es dafür ein besseres Muster? Idealerweise möchte ich einen Ansatz, den wir wiederverwenden können, indem wir einfach eine Funktion senden, um das richtige Feld/Eigenschaft/Spalte von jedem Objekt zu erhalten.

6voto

Mendelt Punkte 35649

Sie könnten eine Funktion schreiben, die eine IEnumerable<string> in eine kommagetrennte Zeichenkette umwandelt:

public string Concat(IEnumerable<string> stringList)
{
    StringBuilder textBuilder = new StringBuilder();
    string separator = String.Empty;
    foreach(string item in stringList)
    {
        textBuilder.Append(separator);
        textBuilder.Append(item);
        separator = ", ";
    }
    return textBuilder.ToString();
}

Sie können dann LINQ verwenden, um Ihre Sammlung/Datensatz/etc abzufragen, um die stringList bereitzustellen.

2voto

Galwegian Punkte 40819

Nebenbei bemerkt: Die erste Änderung, die ich vornehmen würde, ist die Verwendung des StringBuilder-Klasse anstelle eines Strings - das spart Ihnen Ressourcen.

2voto

BigBlondeViking Punkte 3763

Ich liebe Matt Howells Antwort in diesem Beitrag:

Ich musste es zu einer Erweiterung machen:

public static string ToCsv<T>(this IEnumerable<T> things, Func<T, string> toStringMethod)

Nutzung (ich erhalte alle E-Mails und verwandle sie in eine CSV String für E-Mails):

var list = Session.Find("from User u where u.IsActive = true").Cast<User>();

return list.ToCsv(i => i.Email);

2voto

Sapan Ghafuri Punkte 545

Für Sammlungen können Sie diese Methode ebenfalls verwenden, zum Beispiel:

string.Join(", ", contactsCollection.Select(i => i.FirstName));

Sie können jede Eigenschaft auswählen, die Sie trennen möchten.

1voto

string strTest = "1,2,4,6";
string[] Nums = strTest.Split(',');
Console.Write(Nums.Aggregate<string>((first, second) => first + "," + second));
//OUTPUT:
//1,2,4,6

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