Transmitir List<int> para List<string> no .NET 2.0
Pergunta
Você pode lançar um List<int>
para List<string>
de alguma forma?
Eu sei que poderia percorrer e .ToString() a coisa, mas um elenco seria incrível.
Estou em C# 2.0 (então não LINQ).
Solução
O .NET 2.0 tem o ConvertAll
método onde você pode passar uma função de conversor:
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
Outras dicas
Atualizado para 2010
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
O C# 2.0 é capaz de fazer List<T>.Convert
?Nesse caso, acho que seu melhor palpite seria usar isso com um delegado:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });
Algo nesse sentido.
Vote positivamente na resposta de Glenn, que provavelmente é o código correto ;-)
Você não seria capaz de convertê-lo diretamente, pois não existe conversão explícita ou implícita de int para string, seria ter ser um método envolvendo .ToString() como: -
foreach (int i in intList) stringList.Add(i.ToString());
Editar - ou como outros apontaram de forma bastante brilhante, use intList.ConvertAll(delegate(int i) { return i.ToString();}); no entanto, claramente você ainda precisa usar .ToString() e é uma conversão em vez de uma conversão.
Você pode usar:
List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
Você tem que construir uma nova lista.As representações de bits subjacentes de List<int>
e List<string>
são completamente incompatíveis – em uma plataforma de 64 bits, por exemplo, os membros individuais nem sequer são do mesmo tamanho.
Teoricamente é possível tratar uma List<string>
como um List<object>
- isso leva você aos emocionantes mundos da covariância e contravariância e atualmente não é compatível com C# ou VB.NET.
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
substitua os parâmetros result e listOfInt pelos seus parâmetros