O objetivo de criar a classe anterior é ler um arquivo texto com mais de 120.000 linhas (todas extraídas do meu Outlook), contendo e-mails que respondi ou que enviei. Lógico que existem n e-mails enviados para cada pessoa... Então criar uma List que não aceitasse repetições foi interessante.
Criei uma instância (objeto) da classe ListaUnica<String>, onde cada elemento tem um @ (garanti isso no aplicativo que extrai os dados do Outlook). Só que ao ordenar, com Sort(), o programa obedece a ordenação das strings - é o que chamamos ordem natural (alfabética para strings, do menor número para o maior, da menor data para a maior, e por aí vai). Eu preciso ordenar pelo domínio e não pelos nomes das pessoas (gmail com gmail, live com live, etc).
Preciso, ainda, exportar a ListaUnica<T> para arquivo. Para isso criei o método ToFile(String nomeArquivo).
O novo código da minha ListaUnica<T> ficou assim:
class ListaUnica<T> : List<T>
{
public new void Add(T item)
{
if (!this.Contains(item))
base.Add(item);
}
Func<T, T, int> Ordenar = (x, y)
=> x.ToString().Split('@')[1].CompareTo(y.ToString().Split('@')[1]);
public new void Sort()
{
base.Sort(new Comparison<T>(Ordenar));
}
public void ToFile(String nomeArquivo)
{
StreamWriter arq = null;
arq = new StreamWriter(nomeArquivo, true, Encoding.UTF8);
foreach (var item in this)
arq.WriteLine(item);
arq.Close();
}
}
Para usar a exportação de dados da lista, para arquivo, basta fazer:
objListUnica.ToFile(@"c:\arquivoDestino.txt");
E, para ordenar, basta: objListUnica.Sort();