¿Cuál es la sintaxis correcta para esto?
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
¿Qué estoy arruinando? ¿Qué significa TSource?
Respuestas:
El problema es que estás llamando List<T>.Reverse()
que regresa void
.
Puedes hacer:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
o:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
Este último es más caro, ya que revertir un arbitrario IEnumerable<T>
implica almacenar en búfer todos los datos y luego cederlos todos, mientras que List<T>
puede hacer toda la reversión "en el lugar". (La diferencia aquí es que llama al Enumerable.Reverse<T>()
método de extensión, en lugar del List<T>.Reverse()
método de instancia).
Más eficiente aún, podría usar:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
Esto evita la creación de búferes de un tamaño inadecuado, a costa de tomar cuatro declaraciones donde una servirá ... Como siempre, sopese la legibilidad con el rendimiento en el caso de uso real.
Me doy cuenta de que esta pregunta es bastante antigua, pero tuve un problema similar, excepto que mi cadena tenía espacios incluidos. Para aquellos que necesitan saber cómo separar una cadena con algo más que comas:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions elimina los registros que solo serían un carácter de espacio ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Este funciona.
Lo que te falta aquí es que .Reverse () es un método vacío. No es posible asignar el resultado de .Reverse () a una variable. Sin embargo, puede modificar el orden para usar Enumerable.Reverse () y obtener su resultado
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
La diferencia es que Enumerable.Reverse () devuelve un IEnumerable <T> en lugar de ser un retorno nulo
Si estas intentando
lo siguiente debería funcionar:
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());
Salida
Ahora, obviamente, puede invertir el orden como sugirieron otros.