Qual é a sintaxe correta para isso:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
O que estou bagunçando? O que significa o TSource?
O problema é que você está ligando List<T>.Reverse()
e retorna void
.
Você pode fazer:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
ou:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
O último é mais caro, pois a reversão de um arbitrário IEnumerable<T>
envolve o armazenamento em buffer de todos os dados e, em seguida, o rendimento de todos - enquanto List<T>
pode fazer toda a reversão "no local". (A diferença aqui é que ele está chamando o Enumerable.Reverse<T>()
método de extensão, em vez do List<T>.Reverse()
método de instância.)
Mais eficiente ainda, você pode usar:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
Isso evita a criação de quaisquer buffers de tamanho inadequado - ao custo de pegar quatro declarações onde uma servirá ... Como sempre, compare a legibilidade com o desempenho no caso de uso real.
Sei que essa questão é bastante antiga, mas tive um problema semelhante, exceto que minha string tinha espaços incluídos. Para aqueles que precisam saber como separar uma string com mais do que apenas vírgulas:
O StringSplitOptions remove os registros que seriam apenas um caractere de espaço ...
fonte
Este funciona.
fonte
Experimente isto:
fonte
O que está faltando aqui é que .Reverse () é um método vazio. Não é possível atribuir o resultado de .Reverse () a uma variável. No entanto, você pode alterar a ordem para usar Enumerable.Reverse () e obter seu resultado
A diferença é que Enumerable.Reverse () retorna um IEnumerable <T> em vez de ser void return
fonte
Se você está tentando
o seguinte deve funcionar:
Resultado
Agora você pode obviamente inverter a ordem como outros sugeriram.
fonte