Réponses:
.NET 2.0 a la ConvertAll
méthode où vous pouvez passer une fonction de convertisseur:
List<int> l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
Mis à jour pour 2010
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
x => x.ToString()
est compilée dans le même type d'IL que delegate(int x) { return x.ToString(); }
dans ce cas, l'important est d'avoir un compilateur C # (version C #) qui sait ce que =>
c'est. Le framework et le runtime (version .NET) n'ont pas besoin de fonctionnalités spéciales pour cela, donc .NET 2.0 convient ici.
<string>
et que cela fonctionne toujours. Faire justel1.ConvertAll(x => x.ToString());
C # 2.0 est-il capable de faire List<T>.Convert
? Si tel est le cas, je pense que votre meilleure estimation serait d'utiliser cela avec un délégué:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });
Quelque chose de ce genre.
Votez la réponse de Glenn, qui est probablement le bon code ;-)
Vous ne seriez pas en mesure de le convertir directement car aucun cast explicite ou implicite n'existe de int en chaîne, il faudrait que ce soit une méthode impliquant .ToString () telle que: -
foreach (int i in intList) stringList.Add(i.ToString());
Edit - ou comme d'autres l'ont souligné assez brillamment, utilisez intList.ConvertAll (delegate (int i) {return i.ToString ();});, cependant il est clair que vous devez toujours utiliser .ToString () et c'est une conversion plutôt que un casting.
int
était implicitement ou explicitement convertible en string
, cela ne signifie pas qu'il List<int>
a une conversion implicite ou explicite en List<string>
.
Vous devez créer une nouvelle liste. Les représentations binaires sous-jacentes de List<int>
et List<string>
sont complètement incompatibles - sur une plate-forme 64 bits, par exemple, les membres individuels n'ont même pas la même taille.
Il est théoriquement possible de traiter un List<string>
comme un List<object>
- cela vous fait entrer dans les mondes passionnants de la covariance et de la contravariance, et n'est actuellement pas pris en charge par C # ou VB.NET.
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
remplacez les paramètres result et listOfInt par vos paramètres