2016-09-02 4 views
1

를 사용하여 완전한 속성 이름을 중첩 . 나는 시도하고 객체에서 중첩 된 속성을 얻을 때, 나는 예외를 얻을 : 그것은 Car 개체의 특성 HorsePower을 찾을 수 없기 때문에나는 다음과 같은 클래스가 한 반사

horsePowerProperty.GetValue(myCar); // object doesn't match target type exception 

이 발생합니다. PropertyInfo에있는 모든 속성을 살펴 보았으므로 정규화 된 속성 이름이있는 곳을 찾을 수 없습니다. 그런 다음이 문자열을 분할하고 재귀 적으로 속성을 Car 개체에서 가져올 것이다.

도움을 주시면 감사하겠습니다.

+0

왜 그런가요? –

+0

@MatiasCicero에 대해 더 좋은 방법이 없다면? – Puzzled

+0

당신이 성취하고자하는 것을 이해하려고 노력하고 있습니다. 당신이'HorsePower'를 찾고 있다면, 아마도 이미 객체의 구조를 알고있을 것입니다. – itsme86

답변

2

당신은 MemberInfo.DeclaringType을 사용할 수 있습니다 (이 테스트를하지 않은 경우) :

private static object GetPropertyValue(PropertyInfo property, object instance) 
{ 
    Type root = instance.GetType(); 
    if (property.DeclaringType == root) 
     return property.GetValue(instance); 
    object subInstance = root.GetProperty(property.DeclaringType.Name).GetValue(instance); 
    return GetPropertyValue(property, subInstance); 
} 

HorsePowerEngine를 입력 속하는 경우, 당신은 당신의 CarEngine라는 속성을 가질 필요가 있어야 유형.