Création d'une liste séparée par des virgules à partir de IList ou IEnumerable

Quelle est la façon la plus propre de créer une liste de valeurs de chaîne séparées par des virgules à partir d'une IList<string> ou d'une IEnumerable<string> ?

String.Join(...) opère sur une string[] et peut donc être difficile à utiliser lorsque des types tels que IList<string> ou IEnumerable<string> ne peuvent pas être facilement convertis en un tableau de chaînes.

Solution

.NET 4+

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

Solutions détaillées et pré .Net 4.0.

IEnumerable peut être converti en un tableau de chaînes très facilement avec LINQ (.NET 3.5) :

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

Il est assez facile d'écrire la méthode d'aide équivalente si vous en avez besoin :

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

Puis l'appeler comme ceci :

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

Vous pouvez alors appeler string.Join. Bien sûr, vous n'êtes pas obligé d'utiliser une méthode d'aide :

// 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());

Ce dernier point est cependant un peu long :)

Il s'agit probablement de la manière la plus simple de procéder, et elle est également très performante - il existe d'autres questions sur les performances exactes, notamment (mais pas uniquement) [celle-ci][1].

Depuis .NET 4.0, il y a plus de surcharges disponibles dans [string.Join][2], donc vous pouvez simplement écrire :

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

Beaucoup plus simple :)

[1] : https://stackoverflow.com/questions/219519/whats-the-c-method-syntax-for-converting-an-array-to-a-simple-string [2] : http://msdn.microsoft.com/en-us/library/system.string.join

Commentaires (6)

vous pouvez convertir l'IList en un tableau à l'aide de ToArray, puis exécuter une commande string.join sur le tableau.

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

Vous pouvez utiliser .ToArray() sur les Listes et les IEnumerables, puis utiliser String.Join() comme vous le souhaitez.

Commentaires (0)