使用Reflection访问属性值

时间:2013-05-07 10:39:24

标签: c# asp.net .net reflection .net-4.0

我有一个对象

public class School
{
  public Employee Emp{get;set;}
  public string City{get;set;}
}

public class Employee
{
public string Name{get;set;}
}

使用反射我需要从学校对象中获取此员工姓名

我试过

School schl=New School();schl.Employee=new Employee{Name="Shalem"};

var empName= schl.GetType().GetProperty("Emp.Name").GetValue(schl, null)

也试过

PropertyDescriptorCollection allProp= TypeDescriptor.GetProperties(schl);

var empName=allProp["Emp.Name"].GetValue(schl);

我总是得到null。我怎么能得到?

注意:事情是我不知道它将包含什么对象。但我所知道的是,我将获得内部对象的确切名称,如“Emp.Name”等。需要通用解决方案

1 个答案:

答案 0 :(得分:2)

School schl=New School();
schl.Employee=new Employee{Name="Shalem"};

var emp = schl.GetType().GetProperty("Emp").GetValue(schl, null)
var empName = emp.GetType().GetProperty("Name").GetValue(emp, null);

将其拆分,获取Employee对象,然后获取Name的{​​{1}}。

虽然我可以Employee在这种情况下看不到这样做的好处 - 除非代码的范围不同?