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

/// Idade 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

/// Comparação entre osalunos

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() + "
"
);

}

Execute o site e veja na imagem abaixo comodeverá ser exibido na tela:

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.