Risposte:
Il problema è che stai chiamando List<T>.Reverse()
che ritorna void
.
Puoi fare o:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
o:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
Quest'ultimo è più costoso, poiché l'inversione di un arbitrario IEnumerable<T>
implica il buffering di tutti i dati e quindi la restituzione di tutti, mentre List<T>
può fare tutto l'inversione "sul posto". (La differenza qui è che chiama il Enumerable.Reverse<T>()
metodo di estensione, invece del List<T>.Reverse()
metodo di istanza.)
Ancora più efficiente, potresti usare:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
Ciò evita di creare buffer di dimensioni inadeguate, al costo di prendere quattro affermazioni dove una andrà bene ... Come sempre, valuta la leggibilità rispetto alle prestazioni nel caso d'uso reale.
Mi rendo conto che questa domanda è piuttosto vecchia, ma ho avuto un problema simile, tranne per il fatto che la mia stringa aveva degli spazi inclusi. Per coloro che hanno bisogno di sapere come separare una stringa con più di semplici virgole:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions rimuove i record che sarebbero solo uno spazio carattere ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Questo funziona.
Quello che ti manca qui è che .Reverse () è un metodo void. Non è possibile assegnare il risultato di .Reverse () a una variabile. È tuttavia possibile modificare l'ordine per utilizzare Enumerable.Reverse () e ottenere il risultato
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
La differenza è che Enumerable.Reverse () restituisce un IEnumerable <T> invece di essere void return
Se stai cercando di
dovrebbe funzionare:
string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
.Split(new char[]{',', '|'})
.Where(x=>x!=null && x.Trim().Length > 0)
.Select(x=>x.Trim());
Produzione
Ora puoi ovviamente invertire l'ordine come suggerito da altri.