Quelle est la syntaxe correcte pour cela:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Qu'est-ce que je déconne? Qu'est-ce que TSource signifie?
Le problème est que vous appelez List<T>.Reverse()
qui renvoie void
.
Vous pouvez soit faire:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
ou:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
Ce dernier est plus coûteux, car inverser un IEnumerable<T>
arbitraire implique de mettre toutes les données en mémoire tampon, puis de tout céder - alors que List<T>
peut effectuer toutes les inversions "en place". (La différence ici est qu’elle appelle la méthode d’extension Enumerable.Reverse<T>()
au lieu de la méthode d’instance List<T>.Reverse()
.)
Plus efficace encore, vous pourriez utiliser:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
Cela évite de créer des mémoires tampons de taille inappropriée, au détriment de quatre instructions si on le fait ... Comme toujours, comparez lisibilité et performance dans le cas d'utilisation réel.
Je me rends compte que cette question est assez ancienne, mais j'avais un problème similaire, sauf que ma chaîne contenait des espaces. Pour ceux qui ont besoin de savoir séparer une chaîne avec plus que des virgules:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions supprime les enregistrements qui ne seraient que des caractères d'espace ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Celui-ci fonctionne.
Essaye ça:
List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
Ce qui vous manque ici, c'est que .Reverse () est une méthode vide. Il n'est pas possible d'assigner le résultat de .Reverse () à une variable. Vous pouvez cependant modifier l’ordre pour utiliser Enumerable.Reverse () et obtenir votre résultat.
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
La différence est que Enumerable.Reverse () renvoie IEnumerable <T> au lieu d’être vide.
Si vous essayez de
ce qui suit devrait fonctionner:
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());
Sortie
Maintenant, vous pouvez évidemment inverser l'ordre comme suggéré par d'autres.