如何在Reflection中迭代List

Tha*_*ran 12 c# reflection

我有一个叫做学生的属性List<Student>.

在反思中,我可以获得学生财产的价值.

现在的问题是如何迭代学生列表.

我需要检查StudentID [某个值]是否在该集合中.

var collection = studentPro.GetValue(studentObj,null);

//I need to iterate like this,

foreach(var item in collection)
{
     if(item.StudentID == 33)
         //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

请帮我.

Ali*_*tad 15

你只需要施放它:

var collection = (List<Student>) studentPro.GetValue(studentObj,null);
Run Code Online (Sandbox Code Playgroud)

返回给您并存储的值var是类型object.因此List<Student>,在尝试循环之前,您需要先将其强制转换.

RANT

这就是为什么我个人不喜欢var,它隐藏了类型 - 除非在VS中你将它悬停在它上面.如果它是一个声明的类型object,很明显我们不能迭代它.


UPDATE

是,很好.但是应该用反射进行铸造.在反思中,我们不知道List的类型.我们不知道studentObj的实际类型

为此,您可以投射到IEnumerable:

var collection = (IEnumerable) studentPro.GetValue(studentObj,null);
Run Code Online (Sandbox Code Playgroud)