다음 객체가 주어지면 :
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
직접 사용하지 않습니까?