J'essaie de supporter la cartographie de tout type de collection qui implémente Ceci fonctionne bien pour la plupart des types de collecte courants, mais échoue à des cas de bord tels que Cependant, il n'est pas possible de convertir en icollection <> code> car il n'est pas covariant. < / p> L'autre option que j'avais envisageait de rechercher des implémentations implicites et explicites d'ajouter, mais je ne vois aucune information sur la manière de le faire lorsque l'interface est générique? P> Que serait la bonne approche à prendre? p> mise à jour pour afficher le code de code où je réfléchis à partir de xml à la mappage d'objet. p> J'écris un Petit cadre sur la cartographie de l'objet à XML à l'aide d'attributs de classe et de propriété. Donc, je ne peux pas utiliser de génériques car tout cela est fait au moment de l'exécution. P> Je vérifiais initialement Icollection
icollection
LinkedList
linkedlist < T> code> à
icollection
iEnumerable code> avant, mais a couru dans d'autres bizarreries avec elle (Cordings Mettre en œuvre
Iénumérable code> et sont immuables) que j'ai décidé qu'il était le plus sûr de coller à
Icollection <> code> p> p> p>
3 Réponses :
Avec implémentation d'interface explicite, l'objet a toutes les méthodes d'interface, mais le type de l'objet ne le fait pas.
Voici comment ajouter un élément à un LinkedList
À peu près toutes les collections .NET prennent un Évidemment, vous pouvez l'optimiser en déplaçant la population de la liste vers une autre méthode, puis peut-être utiliser votre méthode existante aussi loin que possible, puis utilisez ceci où vous ne pouvez pas. p> p> iEnumerable
Cette fonctionnalité est satisfaite au moment de la compilation à l'aide du Vous pouvez désormais prendre une collection non générique et la rendre générique au moment de l'exécution. Par exemple, ces deux sont équivalents: p> et vous pouvez convertir une collection entière avec ceci: p> cette solution Fonctionne avec des listes liées ainsi que tous les types d'autres types de collection. P> Voir mon exemple de travail sur dotnetfiddle a> p> p> CAST
méthode. Vous avez juste besoin d'une version d'exécution, qui est assez simple:
Vous dites que vous avez une solution de réflexion qui ne fonctionne pas dans certaines situations, ou vous en voulez un? Aussi pouvez-vous s'il vous plaît me montrer le code que vous avez
J'ai une solution de réflexion qui fonctionne pour la plupart des situations, à l'exception de ces cas de bord. J'ai mis à jour ma question à inclure le code démontrant le problème.
Pardon mon ignorance, mais la plupart des types de liste offrent un constructeur qui prend un
ienumerable code>. Y a-t-il une raison pour laquelle vous préférez ne pas l'utiliser?
Aussi ce que @john a dit
@John, types comme la chaîne implémenter également iEnumerable et que je ne veux pas que ce soit accidentellement soit cartographié comme des listes quand ils ne le sont vraiment pas. Aussi iEnumerable est immuable et vous devez donc supposer que chaque type qui implémente iEnumérable aura une CTOR qui prend (iEnumerable)
Note latérale: soyez prudent avec des choses étranges telles que
mycol: Icollection > code> si vous vous souciez.
NON IDINGAIRE Mettre en œuvre ICOLLECTION ? Non liée à cette question, mais je manipule également des types de cahicophones également.
Note latérale 2: Michael Randall Solutions avec une méthode générique aurait produit tellement de code simple / plus sûr avec stackoverflow.com/questions/232535/... (probablement
dynamique code> cacherait même toute la réflexion ) ... Mais ils ont supprimé cette réponse parfaitement fine pour une raison quelconque.