2017-04-23 6 views
0

したがって、見出しにあるとおり、私はpropertyInfoというオブジェクトを持っています。私が欲しいのは、その財産ですが、私はそれを行う方法を見つけることができないようです。C#reflection - PropertyInfoからのプロパティのリストの取得

は、まず私はこの方法で持っていた:

public object GetPropertyInfo(object parent, String propertyName) 
    { 
     object propInf = null; 

     PropertyInfo[] propList = parent.GetType().GetProperties(); 

     foreach (PropertyInfo pInf in propList) 
     { 
      if (propertyName == pInf.Name) 
      { 
       propInf = pInf; 
      } 
     } 

     return propInf; 
    } 

をそして、それは付属「親」オブジェクトは、通常のクラスではなく、反射タイプであると仮定すると、かなりうまく動作します。

しかし、返されるプロパティの一部には、アクセスしたいプロパティが含まれています。これらのインスタンスでは、PropertyInfoをこのメソッドにフィードして、プロパティの別のPropertyInfoを取得する必要があります。しかし、このメソッドにPropertyInfoオブジェクトを置くと、PropertyInfoのプロパティリストが返されます(想像しているように)。

私はそれを読んで、私が欲しいかもしれないものは、PropertyInfoクラスの 'GetValue'メソッドです。私はそれが何であるかを解析することができないので、それは少し不明です。

はそうであっても、私はそのように書いている:

public object GetPropertyInfo(object parent, String propertyName) 
    { 
     object propInf = null; 

     object o = null; 

     if (parent is PropertyInfo) 
     { 
      PropertyInfo p = (parent as PropertyInfo); 
      o = p.GetValue(p, null); 
     } 
     else 
      o = parent; 

     PropertyInfo[] propList = o.GetType().GetProperties(); 

     foreach (PropertyInfo pInf in propList) 
     { 
      if (propertyName == pInf.Name) 
      { 
       propInf = pInf; 
      } 
     } 

     return propInf; 
    } 

はもちろん、私は、第1の仕事を望みました。 PropertyInfo型であることを認識し、次の部分は次の例外を提供します。

TargetException:オブジェクトがターゲットタイプと一致しません。

私は「GetValue」で間違いを犯しているかもしれませんが、私は完全にそれに精通していないので、タイプを指定せずにそれを行うことができれば、それは素晴らしいことでしょう。

答えて

5

私はあなたがやろうとしているのか理解と仮定:

PropertyInfoプロパティ検査されているclassインスタンスの意識することなくclassプロパティを表します。

GetValue方法は、しかし、あなたに指定されたインスタンスためプロパティの価値を提供することができます。

object value = somePropertyInfo.GetValue(someInstance); 
// where someInstance is of the type which has someProperty's represented property. 

あなたがしたい場合はプロパティを現在あなたがPropertyInfo.PropertyType.GetProperties();を使用することができます調べている財産のTypeが、これは唯一のかもしれない(あなたの財産のTypeはなく、コンクリートのプロパティを取得します派生した)Typeが含まれています。

+0

ここで私は古いスポーツを助けてくれました。どうもありがとう! – TheFaithfulLearner

関連する問題