Conversione di un elenco in una stringa separata da virgole

C’è un modo per prendere una lista e convertirla in una stringa separata da virgole?

So che posso semplicemente fare il ciclo e costruirlo, ma in qualche modo penso che qualcuno di voi ragazzi sia un modo più cool di farlo?

Voglio davvero imparare questi tipi di ‘trucchi’, quindi per favore spiega o collega i documenti al metodo che usi.

List list = ...; string.Join(",", list.Select(n => n.ToString()).ToArray()) 

La soluzione semplice è

 List list = new List() {1,2,3}; string.Join(",", list) 

L’ho usato proprio ora nel mio codice, lavorando funtastic.

 List list = new List { 1, 2, 3 }; Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray())); 

Per circa un gazillion di soluzioni a una versione leggermente più complicata di questo problema – molte delle quali sono lente, buggy o addirittura non compilabili – vedi i commenti al mio articolo su questo argomento:

http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx

e il commento StackOverflow:

La sfida di Eric Lippert “virgola quibbling”, la migliore risposta?

Per maggiore freschezza, renderei questo un metodo di estensione su IEnumerable in modo che funzioni su qualsiasi IEnumerable:

 public static class IEnumerableExtensions { public static string BuildString(this IEnumerable self, string delim) { return string.Join(",", self) } } 

Usalo come segue:

 List list = new List { 1, 2, 3 }; Console.WriteLine(list.BuildString(", ")); 

Sembra ragionevolmente veloce.

 IList listItem = Enumerable.Range(0, 100000).ToList(); var result = listItem.Aggregate(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1)); 

La mia voce “intelligente”:

  List list = new List { 1, 2, 3 }; StringBuilder sb = new StringBuilder(); var y = list.Skip(1).Aggregate(sb.Append(x.ToString()), (sb1, x) => sb1.AppendFormat(",{0}",x)); // A lot of mess to remove initial comma Console.WriteLine(y.ToString().Substring(1,y.Length - 1)); 

Solo non ho capito come aggiungere la virgola in modo condizionale.