0
votes

C # créer une liste d'éléments génériques à passer à la fonction qui prend la classe de base

J'ai une fonction qui prend une classe de base comme paramètre: xxx

i alors je souhaite ensuite créer une liste pour passer à cette fonction. La liste sera composée d'objets dérivés de classes qui implémentent ibasitemclass . xxx

J'ai déjà des objets dérivés d'une classe qui est dérivée d'une classe qui implémente ibasitemclass et renvoie une liste d'éléments dérivés. xxx

Comment puis-je assigner dériveditem1 et dériveditem1 à myist ?

Cela ne fonctionne pas: myList.add (Deriveditemlist);

Mon objectif est de passer Dans une liste de listes qui détiennent des objets qui implémentent ibasitemclass à myfunction afin que je puisse les traiter de la même manière car ils implémentent la même classe de base.


2 commentaires

MyList prend clairement listes de ibasetemclass , vous ne pouvez donc pas ajouter des éléments uniques, vous devez ajouter des listes d'entre elles.


Pas une solution idéale mais un travail autour, essayez d'ajouter comme ceci: myList.add (dériveditemlist.select (élément => élément comme ibaseitemclass) .tolist ());


3 Réponses :


0
votes

MyList est une liste de la liste des objets. Mais vous avez essayé de transmettre un seul objet à myList.add (). C'est pourquoi cela échoue. Vous devrez d'abord créer les objets de liste individuels d'abord, puis les ajouter à la myiste.


1 commentaires

J'ai fait des modifications pour clarifier que dériveditem est une liste. J'ai changé le nom sur dérivéImlist .



1
votes

Étant donné que DeriveDeMl1 hérite d'ibasitemclass mais myList.add () s'attend à une liste d'ibasitemclass.

Et vous lui donnez une liste de DeriveDeM1 qui n'hérite pas de la liste d'ibasetitemplas de toute façon.

ici est une solution, pas une solution idéale mais une solution de contournement, essayez d'ajouter comme ceci, il devrait fonctionner: xxx

ou utilisez simplement la méthode d'extension iEnumerable comme suggérée par @juharrr Les commentaires comme: xxx


5 commentaires

Merci rashid. Pourriez-vous s'il vous plaît expliquer pourquoi votre suggestion fonctionne et pourquoi ce n'est pas idéal. Comment suggéreriez-vous accomplir ce que j'essaie d'accomplir de manière meilleure?


Rashid, une autre chose que j'avais essayée dans le sens de votre suggestion était la suivante: myList.add (Deriveditem1 comme liste ); mais cela n'a pas fonctionné non plus.


Vous pouvez transmettre un objet de classe dérivé à une fonction qui attend l'objet de la classe de base en tant que paramètre, mais la liste et ibaseitemclass sont deux types différents. et DeriveDItem1 est dérivé d'ibasitemclass, mais la liste n'est pas dérivée de la liste , vous devriez donc convertir chaque élément de la liste étant transmis à la classe de base pour le rendre acceptable.


J'ai compris! Merci!


Il est plus simple d'utiliser casting () à la place.



0
votes

Définissez simplement les listes comme Liste au lieu de Liste . Cette liste n'a aucun problème de détention d'instances de dériveDItem et il satisfera la liste des listes.


0 commentaires