Como posso solicitar uma List <string>?


Respostas:


238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

@Servy, um motivo para usar OrderBy seria que ListaServizi não tem um método Sort porque é declarado como IList<string>. Este código funcionaria como escrito, ao contrário das respostas que receberam mais votos positivos com ListaServizi.Sort(). Não estou dizendo que essa é a solução que eu escolheria, mas essa foi, na verdade, a única resposta correta quando postei minha resposta.
phoog de

Se não é a solução que você escolheria, por que propô-la como uma resposta? Proponha o que você faria como resposta; se isso significa alterar o tipo de IList para List para que você possa chamá .Sort-lo, por que não fazer isso.
Servy de

1
@Servy Ele resolveu o problema sem alterar a especificação do problema. Essa é a forma preferida, de longe. Além disso, a declaração do problema usa a interface em vez do padrão de implementação, o que é muito importante. Propor a mudança para o tipo Lista é correto, mas deve ser feito como uma resposta alternativa, após a correta, pois requer a mudança do problema.
Aurelien Ribon de

1
@AurélienRibon Nada sobre a definição do problema diz que o tipo da variável não pode ser alterado. Os requisitos são muito específicos para classificar a List. E o custo associado a essa resposta não é trivial e também desnecessário. Literalmente não ganha nada . Ele adiciona complexidade ao código, é menos conciso, é menos eficiente, não há literalmente nada além de desvantagens aqui.
Servy


12

Outras respostas estão corretas para sugerir Sort, mas parecem não perceber o fato de que o local de armazenamento é digitado como IList<string. Sortnão faz parte da interface.

Se você sabe que ListaServizisempre conterá um List<string>, poderá alterar seu tipo declarado ou usar uma conversão. Se não tiver certeza, você pode testar o tipo:

if (typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))
    ((List<string>)ListaServizi).Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Talvez mais idiomático:

List<string> typeCheck = ListaServizi as List<string>;
if (typeCheck != null)
    typeCheck.Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Se você sabe que ListaServiziàs vezes terá uma implementação diferente de IList<string>, deixe um comentário e adicionarei uma sugestão ou duas para classificá-la.


5
ListaServizi.Sort();

Farei isso por você. É bastante simples com uma lista de strings. Você precisa ser um pouco mais inteligente ao classificar objetos.


3
ListaServizié IList<string>; a interface não tem Sortmétodo. Você pelo menos precisa de um gesso aqui.
phoog de

3
List<string> myCollection = new List<string>()
{
    "Bob", "Bob","Alex", "Abdi", "Abdi", "Bob", "Alex", "Bob","Abdi"
};

myCollection.Sort();
foreach (var name in myCollection.Distinct())
{
    Console.WriteLine(name + " " + myCollection.Count(x=> x == name));
}

saída: Abdi 3 Alex 2 Bob 4

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.