Eai Nicolas, Beleza?
Esta saindo no arquivo exatamente o que você esta pedindo. Isso acontece porque o metodo Write de StreamWriter precisa receber como parametro uma string. Ele até aceita outros valores mas ele o converte para string após isso.
Se você tentar pegar a sua List e dar um ToString nela, verá que tera o mesmo resultado que está sendo impresso no seu arquivo .csv
Console.Write(listaCo.ToString()); //saida será System.Collections.Generic.List`1[CodificacaoPeca.Codigo]
Beleza então, agora entendendo isso agora fica mais fácil não é? Basta dar um ToString em cada item da sua lista.
Vou te dar dois exemplos:
Aqui apenas adicionamos um foreach para percorrer a sua lista e ir escrevendo cada item dela. Perceba que eu troquei o metodo Write por WriteLine para que pule a linha após escrever o item.
E também eu adicionei o ponto e vírgula para separar as propriedades para você abrir em um arquivo excel e ele ficar certinho em cada coluna.
using (var escritor = new StreamWriter(fluxoDeArquivo))
{
foreach (var item in listaCo)
{
escritor.WriteLine($"{item.CodigoLista}; {item.Login}; {item.Cracha}");
}
}
Outra maneira você pode sobrescrever o metodo ToString da Classe Codigo, seria quase o mesmo que você estava tentando fazer dando um ToString na sua Lista.
public class Codigo
{
public int CodigoLista { get; set; }
public string Login { get; set; }
public string Cracha { get; set; }
public override string ToString()
{
return $"{CodigoLista}; {Login}; {Cracha}";
}
}
Então sempre que você tiver um objeto do tipo Codigo e dar um ToString nela, terá como retorno essa string que você definiu ali.
Isso ajuda se você precisar fazer a escrita do arquivo em mais de um lugar no seu código.
Ai nesse caso, não será necessário fazer a concatenação das propriedades
using (var escritor = new StreamWriter(fluxoDeArquivo))
{
foreach (var item in listaCo)
{
escritor.WriteLine(item);
}
}
Espero ter ajudado.