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.
.NET 4+
IList<string> strings = new List<string>{"1","2","testing"};
string joined = string.Join(",", strings);
Detail & Pre .Net 4.0 Lösungen
IEnumerable<string>
kann mit LINQ (.NET 3.5) sehr einfach in ein String-Array umgewandelt werden:
IEnumerable<string> strings = ...;
string[] array = strings.ToArray();
Es ist einfach genug, die entsprechende Hilfsmethode zu schreiben, wenn Sie es brauchen:
public static T[] ToArray(IEnumerable<T> source)
{
return new List<T>(source).ToArray();
}
Dann rufen Sie sie wie folgt auf:
IEnumerable<string> 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<string>(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 :)
Sie können .ToArray()
für Lists
und IEnumerables
verwenden und dann String.Join()
wie gewünscht einsetzen.