Olá a todos, irei mostrar neste artigo como utilizar ométodo Sort para ordenar uma lista genérica utilizando a delegate Comparison. Nesteexemplo estarei utilizando o Visual Studio 2008 e .NET Framework 3.5. Neste primeiro momento vamos criar um objeto com o nomeAluno e prepará-lo para fazer a ordenação. Crie um novo WebSite e acrescente uma nova classe com o nome Alunoconforme imagem abaixo:
Na classe Aluno digite o seguinte código: /// /// Classe do objeto Aluno /// public class Aluno { /// /// Construtor Default /// publicAluno() { } /// /// Construtor que já carrega as propriedade /// /// Nome do Aluno /// publicAluno(string nome, intidade) { Nome = nome; Idade = idade; } /// /// Propriedade Nome do Aluno /// public string Nome { get; set; } /// /// Propriedade Idade do Aluno /// public int Idade { get; set; } } Para que possamos utilizar a delegate Comparion vamosacrescentar mais dois métodos na classe usuário, uma para fazer a comparação donome e outro para idade, ou seja, para fazer a ordenação tanto pelo nome comopela idade do aluno. Acrescente os doismétodos abaixo: /// /// Executa a comparação entre os nomes para ordenação /// /// /// /// public static intOrdenaPorNome(Aluno al1, Aluno al2) { returnal1.Nome.CompareTo(al2.Nome); } /// /// Executa a comparação entre as idades para ordenação /// /// /// /// public static intOrdenaPorIdade(Aluno al1, Aluno al2) { returnal1.Idade.CompareTo(al2.Idade); } Com isto o nosso objeto está preparado para ser ordenado. Para testarmos vamos criar uma lista deAlunos. No método Page_Load da páginaDefault.aspx digite o seguindo código: // Cria lista deAlunos List<Aluno> alunos = newList<Aluno>(); // Adicionavários alunos na lista alunos.Add(new Aluno("Denis", 17)); alunos.Add(new Aluno("João", 16)); alunos.Add(new Aluno("Alberto", 20)); alunos.Add(new Aluno("Maurício", 13)); alunos.Add(new Aluno("Caio",15)); Antes de prosseguir neste método vamos criar outro métodoque irá receber como parâmetro uma string informando se é para ordenar pelonome ou pela idade. Segue o método abaixo: /// /// Método que retorna a comparação para ordenar a lista /// /// Ordenar Por /// private Comparison<Aluno>getComparison(string ordenar_por) { // Verifica se épara ordenar por nome ou por idade if(ordenar_por.Equals("Nome")) { // Retornaordenação por Nome return new Comparison<Aluno>(Aluno.OrdenaPorNome); } else { // Retornaordenação por Idade return new Comparison<Aluno>(Aluno.OrdenaPorIdade); } } Veja neste método que de acordo com o que é para ordenar eleretorna uma nova comparação de aluno passando o método static criado na classeusuário. Prosseguindo no método Page_Load vamos utilizar agora ométodo Sort da lista de alunos passandocomo parâmetro o retorno do métodogetComparison que acabamos de criar e ao chamar o método getComparison iremos passar a string com o valor nome. Vejaa linha de código para isso: // Adiciona nométodo sort a ordenação por nome. alunos.Sort(getComparison("Nome")); Agora precisamos exibir a lista para verificarmos que tevesucesso a ordenação. Para isso segue o código abaixo: // Percorre cadaaluno da lista foreach (Aluno aluno inalunos) { // Escreve na telao Nome do aluno e a Idade Response.Write("Nome:" + aluno.Nome + " Idade: "+ aluno.Idade.ToString() + " }
Veja que a lista foi ordenada pelo nome do aluno conformepedimos. Como nesse exemplo também tem a possibilidade de ordenar por idade,basta alterar o parâmetro do método getComparison para idade e executarnovamente que você terá o seguinte resultado:
Espero ter ajudado, qualquer dúvida ou sugestões comentem pelo site. Obrigado e até a próxima.
");