Erstellen einer kommagetrennten Liste aus IList oder IEnumerable

Was ist der sauberste Weg, um eine kommagetrennte Liste von String-Werten aus einer IList<string> oder IEnumerable<string> zu erstellen?

String.Join(...) arbeitet mit einem string[] und kann daher umständlich sein, wenn Typen wie IList<string> oder IEnumerable<string> nicht einfach in ein String-Array umgewandelt werden können.

Lösung

.NET 4+

IList strings = new List{"1","2","testing"};
string joined = string.Join(",", strings);

Detail & Pre .Net 4.0 Lösungen

IEnumerable kann mit LINQ (.NET 3.5) sehr einfach in ein String-Array umgewandelt werden:

IEnumerable strings = ...;
string[] array = strings.ToArray();

Es ist einfach genug, die entsprechende Hilfsmethode zu schreiben, wenn Sie es brauchen:

public static T[] ToArray(IEnumerable source)
{
    return new List(source).ToArray();
}

Dann rufen Sie sie wie folgt auf:

IEnumerable strings = ...;
string[] array = Helpers.ToArray(strings);

Sie können dann string.Join aufrufen. Natürlich müssen Sie nicht eine Hilfsmethode verwenden:

// C# 3 and .NET 3.5 way:
string joined = string.Join(",", strings.ToArray());
// C# 2 and .NET 2.0 way:
string joined = string.Join(",", new List(strings).ToArray());

Letzteres ist allerdings ein ziemlicher Brocken :)

Dies ist wahrscheinlich der einfachste Weg, es zu tun, und auch ziemlich performant - es gibt andere Fragen darüber, wie genau die Leistung ist, einschließlich (aber nicht beschränkt auf) diese.

Seit .NET 4.0 gibt es mehr Überladungen in string.Join, so dass man eigentlich nur schreiben kann:

string joined = string.Join(",", strings);

Viel einfacher :)

Kommentare (6)

können Sie die IList mit ToArray in ein Array konvertieren und dann einen string.join-Befehl für das Array ausführen.

Dim strs As New List(Of String)
Dim arr As Array
arr = strs.ToArray
Kommentare (0)

Sie können .ToArray() für Lists und IEnumerables verwenden und dann String.Join() wie gewünscht einsetzen.

Kommentare (0)