La manière de voter, Générique Listes de façon dynamique en C#?
Je suis en train de jeter List<object>
à List<string>
de façon dynamique. J'ai essayé de plusieurs façons, mais je ne peux pas trouver une solution. C'est un petit exemple qui montre le problème:
List<object> listObject = new List<object>();
listObject.Add("ITEM 1");
listObject.Add("ITEM 2");
listObject.Add("ITEM 3");
List<string> listString = ¿¿listObject??;
Merci d'avance!
Ce ne sera pas possible dans la version 4, car il n'est pas typesafe soit de "sortie" ou "abattu" un
List<T>
- c'est invariant, pas covariant et contravariant. En passant, je suis fatigué de cette désinformation est affecté à chaque question à propos de la collecte co/contravariance.OriginalL'auteur | 2009-08-21
Vous devez vous connecter pour publier un commentaire.
Si vous pouvez utiliser LINQ puis le
Cast
méthode de faire ce que vous avez besoin de:Vous pouvez également utiliser le
ConvertAll
méthode, comme Stan le souligne dans sa réponse:Si vous n'êtes pas à l'aide de C#3, alors vous aurez besoin d'utiliser le "vieux" délégué syntaxe plutôt qu'un lambda:
J'essaie toujours de se rappeler que lorsque LINQ n'est pas disponible, alors il n'est ni lambda de la syntaxe.
+1 bon point Luke
Et juste pour devancer tout nitpickers... je suis conscient que VS2008 pouvez cibler les versions antérieures de l' .NET framework, ce qui permettrait l'utilisation de lambda de la syntaxe, mais pas LINQ. Mais, comme une règle-de-pouce, pas de LINQ signifie généralement pas lambdas trop.
OriginalL'auteur LukeH
Si vous êtes en utilisant .NET 3.5, vous pouvez utiliser, de cette façon, vous n'avez pas à faire un extra ToList(). Vous pouvez également fournir votre propre convertisseur si vous avez besoin de convertir advanced objets.
Si vous ne pouvez pas utiliser LINQ, vous pouvez le faire
Je pense que tu veux dire C# 3.0 et .Net 3.5.
c'est ce que je voulais dire. merci.
J'ai été ce qui implique que ToList() est un supplément de l'énumération.
Êtes-vous sûr? ToList() permet de faire une énumération, mais c'est tout. Cast<string>() ne sera pas réellement d'énumérer la collection.
OriginalL'auteur Stan R.
Comment combat ce:
Utilisation:
OriginalL'auteur Jon
Je ne pense pas que vous pouvez le faire en une seule étape. Au lieu de cela, essayez quelque chose comme ceci:
Il peut être fait en une seule étape, voir les autres réponses...
OriginalL'auteur TLiebe
Enumerable.Cast<T>()
.OriginalL'auteur svinto
Mon premier post... j'Espère utile semble travailler dans mon projet...
Je pense que je vais aussi ajouter un essayez d'attraper quelque part.
comment tester
OriginalL'auteur Riccardo G