web-dev-qa-db-fra.com

LINQ: Comment concaténer une liste d'entiers dans une chaîne délimitée par des virgules?

C'est probablement quelque chose de stupide que j'ai manqué, mais j'essaie de concaténer une liste d'entiers au lieu de les additionner avec:

integerArray.Aggregate((accumulator, piece) => accumulator+"," + piece)

Le compilateur s'est plaint d'une erreur d'argument. Existe-t-il un moyen simple de le faire sans avoir à passer par une boucle?

39
Haoest

Quelle version de .NET? Dans la version 4.0, vous pouvez utiliser string.Join(",",integerArray). Dans 3.5, je serais tenté d'utiliser simplement string.Join(",",Array.ConvertAll(integerArray,i=>i.ToString())); (en supposant que est un tableau). Sinon, soit make c'est un tableau, soit utilisez StringBuilder.

68
Marc Gravell

Vous voulez probablement utiliser String.Join .

string.Join(",", integerArray.Select(i => i.ToString()).ToArray());

Si vous utilisez .Net 4.0, vous n'avez pas besoin de passer par les tracas de la réification d'un tableau. et peut juste faire

 string.Join(",", integerArray);
18
48klocs

L'erreur que vous obtenez est parce que vous n'avez pas utilisé le remplacement de Aggregate qui vous permet de spécifier la graine. Si vous ne spécifiez pas la graine, elle utilise le type de la collection.

integerArray.Aggregate("", (accumulator, piece) => accumulator + "," + piece);
17
Samuel

Juste pour ajouter une autre alternative à @ Marc

var list = string.Join( ",", integerArray.Select( i => i.ToString() ).ToArray() );
2
tvanfosson