2016-09-02 19 views
1

を使用して、完全修飾プロパティ名を入れ子。私がしようとすると、オブジェクトからネストされたプロパティを取得する場合しかし、私は例外を取得:は、私は以下のクラスを持って反射

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

それはCarオブジェクトのプロパティHorsePowerを見つけることができないので、これが起こります。私は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というプロパティを持っている必要があることが必要ですタイプ。

関連する問題