Quelle est la syntaxe correcte pour cela:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Qu'est-ce que je fous? Que signifie TSource?
Quelle est la syntaxe correcte pour cela:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Qu'est-ce que je fous? Que signifie TSource?
Le problème, c'est que vous appelez List<T>.Reverse()
qui renvoie void
.
Vous pouvez soit le 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 cher, comme l'inversion de l'arbitraire IEnumerable<T>
implique la mise en mémoire tampon toutes les données et puis ce qui donne tout, alors qu' List<T>
peut faire toutes les renverser "en place". (La différence ici est que c'est l'appel de la Enumerable.Reverse<T>()
méthode d'extension, au lieu de l' List<T>.Reverse()
méthode d'instance.)
Plus efficace encore, vous pouvez 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 les buffers de taille inappropriée - au prix de quatre états où l'on va faire... Comme jamais, de juger de la lisibilité à l'encontre de la performance dans le réel de cas d'utilisation.
Je me rends compte que cette question est assez ancienne, mais j'ai eu 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);
le StringSplitOptions prend supprime les enregistrements qui ne seraient qu'un caractère espace ...
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.
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.