使用反射访问属性值

本文关键字:属性 访问 反射 | 更新日期: 2023-09-27 18:12:39

我有一个对象

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);

我总是感到空虚。我该怎么走?

注意:问题是我不知道它会包含什么对象。但我所知道的是,我将获得内部对象的确切名称,如"Emp.name"等。需要一个通用解决方案

使用反射访问属性值

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对象,然后得到EmployeeName

尽管我在这个例子中看不到这样做的好处,当你可以做string empName = schl.Employee.Name时——除非代码的范围不同?