Convertir un objet en liste générique
J'ai 3 generict type de liste.
List<Contact> = new List<Contact>();
List<Address> = new List<Address>();
List<Document> = new List<Document>();
Et l'enregistrer dans une variable de type objet. Maintenant, je nedd ne jeter Retour à la Liste pour vérifier un foreach, certains comme ceci:
List<Contact> = (List<Contact>)obj;
Mais obj contenu change à chaque fois, et j'ai un peu comme ceci:
List<???> = (List<???>)obj;
J'ai une autre variable courant d'obj Type:
Type t = typeof(obj);
Puis-je faire quelque chose comme ça??:
List<t> = (List<t>)obj;
Obs: j'ai pas le type en cours dans la liste mais j'ai besoin de cast , et je n'ai pas maintenant une autre forme à la place:
List<Contact> = new List<Contact>();
source d'informationauteur JoeLoco
Vous devez vous connecter pour publier un commentaire.
Ce qu'est un problème épineux. Essayez ceci:
Entre c, a et d, il y a 2 nuls et 1 non-nulle, ou 3 valeurs null.
Prendre 2:
Beaucoup d'essais et d'erreur qui m'a donné ce sur SL 5, mais il convient également de travailler régulièrement, sur le C#. Vous devez également ajouter LINQ à l'aide de votre liste pour la dernière moitié de travailler.
Profitez-en!
J'ai eu le même problème et résolu par la recherche à la fin de la coulée des objets. Avez-vous vraiment besoin de le jeter à l' (fermé) types génériques? Dans mon cas, le (ouvert) de type générique a une interface que j'ai utilisé pour la lancer.
Une solution générale de cette façon (pour instancier un type avec un paramètre générique basé sur une
System.Type
objet) n'est pas possible. Si vous êtes vraiment affaire avec ces trois types, même si, alors vous êtes dans la chance parce que c'est assez facile:Non, vous ne pouvez pas la lancer sans aller dans les coins (c'est: de la réflexion), les paramètres de type générique à être connue au moment de la compilation. Bien sûr, vous pouvez faire quelque chose comme ceci:
content.Where(o => o is type).ToList().Foreach(stuff);
J'ai eu ce problème lors de l'écriture d'un Attribut Validation où j'ai reçu un objet à partir de la
ValidationContext
et je savais qu'elle devait être une liste, mais pas ce que c'était une liste de. Il a jeté une exception quand j'ai essayé de le jeter commeIEnumerable<object>
mais il pourrait être jeté commeIEnumerable
qui a alors permis la.Cast<object>()
via linq.À la fin de ce qui a fonctionné a été:
J'ai rencontré le même problème - j'ai une collection de type de données n'est connue qu'au moment de l'exécution, et je ne peux pas le jeter n'importe quoi. Aucune des solutions ci-dessus a travaillé. Enfin je l'ai résolu par la sérialisation JSON et de sérialisation de retour. Bien sûr, il n'est pas idéal, mais il peut aider quelqu'un.
Vous pourriez avoir besoin de le faire: