Een door komma's gescheiden lijst maken van IList of IEnumerable

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.

Oplossing

.NET 4+

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

Detail & Pre .Net 4.0 Solutions

IEnumerable kan zeer eenvoudig met LINQ (.NET 3.5) in een string array worden omgezet:

IEnumerable 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 source)
{
    return new List(source).ToArray();
}

Roep het dan als volgt aan:

IEnumerable 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(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 :)

Commentaren (6)

kunt u de IL-lijst converteren naar een matrix met ToArray en vervolgens een opdracht string.join uitvoeren op de matrix.

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

Je kunt .ToArray() gebruiken op Lists en IEnumerables, en dan String.Join() gebruiken zoals je wilde.

Commentaren (0)