给定以下对象:
public class Customer {
public String Name { get; set; }
public String Address { get; set; }
}
public class Invoice {
public String ID { get; set; }
public DateTime Date { get; set; }
public Customer BillTo { get; set; }
}
我想使用反射Invoice
来获取的Name
属性Customer
。假设此代码可以正常工作,这就是我要做的事情:
Invoice inv = GetDesiredInvoice(); // magic method to get an invoice
PropertyInfo info = inv.GetType().GetProperty("BillTo.Address");
Object val = info.GetValue(inv, null);
当然,这将失败,因为“ BillTo.Address”不是Invoice
该类的有效属性。
因此,我尝试编写一种方法,将句点上的字符串分割成多个部分,然后遍历对象以查找我感兴趣的最终值。它可以正常工作,但是我对此并不完全满意:
public Object GetPropValue(String name, Object obj) {
foreach (String part in name.Split('.')) {
if (obj == null) { return null; }
Type type = obj.GetType();
PropertyInfo info = type.GetProperty(part);
if (info == null) { return null; }
obj = info.GetValue(obj, null);
}
return obj;
}
关于如何改进此方法或解决此问题的更好方法的任何想法?
发布后进行编辑,我看到了一些相关的帖子...但是,似乎没有专门解决此问题的答案。另外,我仍然希望获得有关实施的反馈。
GetDesiredInvoice
还给您一个类型的对象,Invoice
为什么不inv.BillTo.Name
直接使用呢?