2012-02-09 19 views
3

私はXML設定ファイルを大量に使用するプロジェクトに取り組んでいます。共有コードの一般的な実装で次のレベルに移行したいと思います。動的プロパティから値を取得

問題は、私の5つのクラスのうち、2つが「説明」グリッドビューを別々に処理することです。 このグリッドビューには、さまざまな列の適切なタイプのオブジェクトが表示されます。

注:データはデータレコードを介して渡されるため、GUIはソースオブジェクトに直接アクセスできません。ここで

は(動作しませんでしたこと)ではなく愚かなハックを使用して、動的なデータを取得するために私の現在の「試み」である

GetObjectData(MyClass myObject, string[] dataToGet) 
{ 
    List<string> dataToReturn = new List<string>(); 
    foreach (string propertyName in dataToGet) 
    { 
     try 
     { 
     Label tempLabel = new Label(); 
     tempLabel.DataBindings.Add("Text", myObject, propertyName); 

     dataToReturn.Add(tempLabel.Text); 
     } 
     catch { dataToReturn.Add(""); } 
    } 
} 

あり、これを行うための方法であることが、私はよく分からないしなければなりませんそれが呼び出されるか、問題にどのように取り組むかということです。

答えて

2

あなたは、このようにプロパティ値を取得するためにリフレクションを使用することができます。

public void GetObjectData(MyClass myObject, string[] dataToGet) 
     {  
      List<string> dataToReturn = new List<string>(); 

      Type type = myObject.GetType(); 

      foreach (string propertyName in dataToGet)  
      {   
       try   
       { 
        PropertyInfo pInfo = type.GetProperty(propertyName); 
        var myValue = pInfo.GetValue(myObject, null); 
        dataToReturn.Add(Convert.ToString(myValue));   
       }  
       catch 
       { dataToReturn.Add(""); 
       }  
      } 
     } 

希望あなたは..あなたがdictionayを使用することができ、このヘルプは、文字列のあなたのリターンではなく、リストを保存します。参考のために


Use reflection to get the value of a property by name in a class instance
Set property Nullable<> by reflection
Reflection - get attribute name and value on property

MSDN

+0

パーフェクトを使用している場合、あなたはまた、動的型を使用することができます!魅力のように動作します:) –

1

あなたは、.NET Framework 4

public void GetObjectData(dynamic myObject, string[] dataToGet) 
    {  
     List<string> dataToReturn = new List<string>(); 

     foreach (string propertyName in dataToGet)  
     {   
      try   
      { 
       dataToReturn.Add(Convert.ToString(myObject.propertyName));   
      }  
      catch 
      { dataToReturn.Add(""); 
      }  
     } 
    } 
+0

これは動作していないようです...コンパイラは '.propertyName'はコンパイル時の値だと思っています。特に、 '。 "foo"'を使ってもうまくいきません。 –

関連する問題