160 votes

Conversion d’une liste générique à une chaîne CSV

J'ai une liste de valeurs de type entier (Liste) et souhaitez générer une chaîne délimitée par des virgules de valeurs. C'est l'ensemble des éléments dans la liste de sortie pour une seule virgule delimted liste.

Mes pensées... 1. passer la liste à une méthode. 2. Utiliser stringbuilder pour itérer la liste et ajouter des virgules 3. Tester le dernier caractère, et si c'est une virgule, le supprimer.

Quelles sont vos pensées? Est-ce la meilleure façon de faire?

Comment mon code changer si je voulais traiter non seulement les entiers (mon plan actuel), mais les chaînes, aspire, double, bool, etc, etc. dans l'avenir? Je pense lui faire accepter une liste de tout type.

285voto

Jason Points 125291

C'est incroyable ce que le Cadre déjà fait pour nous.

List<int> myValues;
string csv = String.Join(",", myValues.Select(x => x.ToString()).ToArray());

Pour le cas général:

IEnumerable<T> myList;
string csv = String.Join(",", myList.Select(x => x.ToString()).ToArray());

Comme vous pouvez le voir, c'est effectivement différent. Méfiez-vous que vous pourriez avoir besoin pour réellement envelopper x.ToString() entre guillemets (c'est à dire, "\"" + x.ToString() + "\"") en cas x.ToString() contient des virgules.

Pour une lecture intéressante sur une légère variante de ce: voir Virgule Arguties sur Eric Lippert blog.

Note: Ceci a été écrit avant .NET 4.0 est sorti officiellement. Maintenant, nous pouvons juste dire

IEnumerable<T> sequence;
string csv = String.Join(",", sequence);

à l'aide de la surcharge String.Join<T>(string, IEnumerable<T>). Cette méthode sera automatiquement du projet de chaque élément x de x.ToString().

16voto

Krishna Points 749

3.5, j’étais encore capable de le faire. Son beaucoup plus simple et n’a pas besoin de lambda.

11voto

Whatsit Points 3292

Vous pouvez créer une méthode d’extension que vous pouvez appeler sur n’importe quel IEnumerable :

Ensuite, vous pouvez appeler simplement la méthode sur la liste initiale :

7voto

João Angelo Points 24422

Vous pouvez utiliser `` .

3voto

Frank M. Points 41

Tout si seule de travail solution liste une liste (of string)

Si vous avez une liste générique de vos propres objets comme liste (de voiture) où la voiture a des propriétés n, vous devez en boucle la PropertiesInfo de chaque objet car.

Regardez : http://www.csharptocsharp.com/generate-csv-from-generic-list

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X