我有以下两个类:
public class Address
{
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
public class Employee
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public Address EmployeeAddress { get; set; }
}
我有一个员工类的实例如下:
var emp1Address = new Address();
emp1Address.AddressLine1 = "Microsoft Corporation";
emp1Address.AddressLine2 = "One Microsoft Way";
emp1Address.City = "Redmond";
emp1Address.State = "WA";
emp1Address.Zip = "98052-6399";
var emp1 = new Employee();
emp1.FirstName = "Bill";
emp1.LastName = "Gates";
emp1.EmployeeAddress = emp1Address;
我有一个根据属性名称获取属性值的方法,如下所示:
public object GetPropertyValue(object obj ,string propertyName)
{
var objType = obj.GetType();
var prop = objType.GetProperty(propertyName);
return prop.GetValue(obj, null);
}
上述方法适用于像 GetPropertyValue(emp1, "FirstName")
这样的调用,但是如果我尝试 GetPropertyValue(emp1, "Address.AddressLine1")
它会抛出一个异常,因为 objType.GetProperty(propertyName);
无法找到嵌套的对象属性值。有办法解决这个问题吗?
最佳答案
public object GetPropertyValue(object obj, string propertyName)
{
foreach (var prop in propertyName.Split('.').Select(s => obj.GetType().GetProperty(s)))
obj = prop.GetValue(obj, null);
return obj;
}
谢谢,我来这里是为了寻找同样问题的答案。我最终修改了您的原始方法以支持嵌套属性。这应该比必须执行嵌套方法调用更可靠,嵌套方法调用最终可能会超过 2 个嵌套级别。
关于c# - 使用反射获取嵌套对象属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535287/