Comment itérer la liste en réflexion
Je vais avoir une propriété appelée Étudiants, qui est de type List<Student>
.
Dans la réflexion, je peut avoir la valeur d'Étudiants de la Propriété.
Maintenant, le problème est de savoir Comment effectuer une itération de la Liste des Élèves.
J'ai besoin de vérifier si StudentID [ valeur ] est dans la collection.
var collection = studentPro.GetValue(studentObj,null);
//I need to iterate like this,
foreach(var item in collection)
{
if(item.StudentID == 33)
//Do stuff
}
S'il vous plaît aider moi.
source d'informationauteur Thaadikkaaran
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de cast:
La valeur retournée et stockées dans
var
est de typeobject
. Si vous avez besoin de le jeter auxList<Student>
tout d'abord, avant d'essayer de boucle à travers elle.DIATRIBE
C'est pourquoi je personnellement n'aime pas
var
il cache le type, à moins que VS vous placez sur elle. Si elle a été déclarée avec le typeobject
il a été immédiatement évident que nous ne pouvons itérer dessus.Mise à JOUR
Pour ce faire, vous pouvez lancer à
IEnumerable
:Essayer cette
D'autres ont suggéré de casting à la Liste, mais je vais supposer que cela ne fonctionne pas pour vous... si vous aviez accès à l'Étudiant de classe, vous ne devrez pas utiliser la réflexion pour commencer. Donc, au lieu de cela, les jeter à IEnumerable et puis à l'intérieur de votre boucle, vous aurez à utiliser la réflexion de nouveau accès à tous les propriétés que vous souhaitez sur chaque élément de la collection.
var collection = (IEnumerable)studentPro.GetValue(studentObj,null)
La façon dont vous avez essayé est, est la bonne. Vous avez juste besoin de corriger votre code et de la fonte de la valeur de retour de
GetValue
:Vous pouvez avoir quelque chose comme ci-dessous pour créer un POCO objet de votre objet proxy. Veuillez noter que je suis en s'appuyant sur l'utilisation de l'attribut XMLIgnore à briser les références circulaires