Olá pessoal!
Na aula sobre ordenação de listas, tínhamos que ordenar, em ordem alfabética, uma lista de objetos do tipo Aula que possui duas propriedades: Titulo e Tempo. O professor explicou que, pelo fato de terem duas propriedades, o método Sort não conseguiria fazer a ordenação. Assim, precisaríamos implementar na classe Aula a interface IComparable e implementar o método CompareTo:
class Aula : IComparable //Implementa a interface IComparable para poder comparar dois bojetos dessa classe
{
public Aula(string titulo, int tempo)
{
Titulo = titulo;
Tempo = tempo;
}
public string Titulo { get ; set; }
public int Tempo { get ; set ; }
//A interface IComparable exige uma implementação do método CompareTo, que precisa ser chamado pelo algoritmo interno do método Sort() da classe List<T>
public int CompareTo(object? obj) //método para poder fazer a comparação
{
Aula that = obj as Aula; //converte obj para o tipo Aula
return this.Titulo.CompareTo(that.Titulo); //faz a comparação do objeto aula com obj
}
public override string ToString()
{
return $"{Titulo} ({Tempo} min)";
}
}
Ele explicou também que caso quiséssemos ordenar de acordo com a propriedade Tempo, poderíamos usar a seguinte expressão lambda:
aulas.Sort((este, outro) => este.Tempo.CompareTo(outro.Tempo));
Assim, eu pensei: "Será que essa mesma expressão lambda funciona para fazer a ordenação em ordem alfabética?". Testei:
aulas.Sort((a, b) => a.Titulo.CompareTo(b.Titulo));
E funcionou! Minha dúvida então é: por que implementar a interface IComparable e o método CompareTo se a expressão lambda já soluciona o problema?