2008-09-04 29 views

Respuesta

137

.NET 2.0 tiene el método ConvertAll donde se puede pasar de una función de conversión:

List<int> l1 = new List<int>(new int[] { 1,2,3 }); 
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); }); 
+1

impresionante, gracias. Después de horas de dolorosa búsqueda, ¡vine aquí! y funcionó como un encanto! : D – iamserious

+1

Estoy de acuerdo. ¡Gracias por compartir! – Junto

8

¿Es C# 2.0 capaz de hacer List<T>.Convert? Si es así, creo que lo mejor será utilizarlo con un 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 en esa línea.


respuesta de Upvote Glenn, que es probablemente el código correcto ;-)

1

Usted tiene que construir una nueva lista. Las representaciones de bits subyacentes de List<int> y List<string> son completamente incompatibles: en una plataforma de 64 bits, por ejemplo, los miembros individuales no tienen el mismo tamaño.

Teóricamente es posible tratar List<string> como List<object> - esto lo lleva a los emocionantes mundos de la covarianza y la contravarianza, y actualmente no es compatible con C# o VB.NET.

+0

[@Curt] (http://stackoverflow.com/questions/44942/cast-listint-to-liststring#44950):> Teóricamente es posible tratar > una lista como una lista de - > esto se consigue en los mundos emocionantes > de covarianza y contravarianza y > no es compatible actualmente con C# o > VB.NET y C# .NET tiene realmente apoyar covarianza. Simplemente no con genéricos. –

3

Usted no sería capaz de lanzar directamente como molde sin explícita o implícita que existe de int a string, sería tiene que ser un método que implica .ToString(), tales como: -

foreach (int i in intList) stringList.Add(i.ToString()); 

Editar - o como otros han señalado de manera brillante, use intList.ConvertAll (delegate (int i) {return i.ToString();}) ;, sin embargo, claramente todavía tiene que usar .ToString() y es un conversión en lugar de un elenco.

+3

La existencia de un elenco entre los tipos genéricos no tiene nada que ver con la capacidad de emitir entre la proyección.IE, incluso si 'int' fue convertible implícita o explícitamente a' cadena', eso no significa que 'List ' tenga una conversión implícita o explícita a 'List '. –

99

actualizada para 2010

List<int> l1 = new List<int>(new int[] { 1,2,3 }); 
List<string> l2 = l1.ConvertAll<string>(x => x.ToString()); 
+6

¡Gracias! Esto me ahorró un montón de tiempo –

+0

La expresión allí no funcionará en .NET 2.0, ¿o sí? –

+2

No, las lambdas se introdujeron en C# 3.0 por lo que esto no funcionará en 2.0. – Luke

5

Se puede utilizar:

List<int> items = new List<int>(new int[] { 1,2,3 }); 
List<string> s = (from i in items select i.ToString()).ToList(); 
0

result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()

reemplace los parámetros result y listOfInt a sus parámetros

Cuestiones relacionadas