Wat is de schoonste manier om een door komma's gescheiden lijst van string-waarden te maken van een IList<string>
of IEnumerable<string>
?
String.Join(...)
werkt op een string[]
en kan dus lastig zijn om mee te werken als typen als IList<string>
of IEnumerable<string>
niet eenvoudig omgezet kunnen worden in een string array.
.NET 4+
IList<string> strings = new List<string>{"1","2","testing"};
string joined = string.Join(",", strings);
Detail & Pre .Net 4.0 Solutions
IEnumerable<string>
kan zeer eenvoudig met LINQ (.NET 3.5) in een string array worden omgezet:
IEnumerable<string> strings = ...;
string[] array = strings.ToArray();
Het is gemakkelijk genoeg om de equivalente helper methode te schrijven als je dat nodig hebt:
public static T[] ToArray(IEnumerable<T> source)
{
return new List<T>(source).ToArray();
}
Roep het dan als volgt aan:
IEnumerable<string> strings = ...;
string[] array = Helpers.ToArray(strings);
Je kunt dan string.Join
aanroepen. Natuurlijk moet je geen helper methode gebruiken:
// 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());
Dat laatste is echter wel een beetje een mondvol :)
Dit is waarschijnlijk de eenvoudigste manier om het te doen, en behoorlijk performant ook - er zijn andere vragen over hoe de performance precies is, inclusief (maar niet beperkt tot) deze.
Vanaf .NET 4.0 zijn er meer overloads beschikbaar in string.Join
, dus je kunt eigenlijk gewoon schrijven:
string joined = string.Join(",", strings);
Veel eenvoudiger :)
Je kunt .ToArray()
gebruiken op Lists
en IEnumerables
, en dan String.Join()
gebruiken zoals je wilde.