从动态列表中获取值

时间:2013-12-08 09:20:11

标签: c# dynamic reflection

我有一个动态列表,我正在尝试使用反射从属性中获取值。代码如下:

var list = new List<Employee>();
list.Add(new Employee {FirstName="Krishna"});
IEnumerable<dynamic> data = list;

在Employee中,假设我有名为FirstName的属性,

 Type type = data.GetType().GetGenericArguments()[0];
 PropertyInfo property = type.GetProperty( "FirstName" );

现在,我如何从这个属性获得价值?我试过了:

 object value = property.GetValue( data, null ); 

但是它给我一个错误,说对象与目标类型不匹配。

2 个答案:

答案 0 :(得分:1)

您必须向property.GetValue函数发送要获取其值的对象

喜欢:data[0]

将您的行换成: object value = property.GetValue(data[0], null); 这将返回列表中第一个元素的FirstName。

答案 1 :(得分:1)

这里所有的动态对象方法都相同,但是你必须从列表中访问数据,所以它看起来如下所示:

data.GetType().GetProperty("visible").GetValue(data[i],null);

您可以直接进行Typecast并保存在您的类型数据中。