2017-12-05 12 views
0

実行時に "strx"の値と型を取得する方法は?ジェネリックを使用しているとき(実行中のコードが "null"のため)、セル(プロパティ)の値を取得します。C#実行時にジェネリッククラスのプロパティ値を取得する方法

public class Foo 
    { 
     public int x, y; 
     public string strx, stry; 
    } 

    public void GetCellValueByName<T>(GridView gridview, string name/) 
    { 
     T = (T)Activator.CreateInstance(typeof(T)); 

     object row = gridview.GetRow(gridview.GetSelectedRows()[0]); 

     if (row != null && row is T) 
     { 
      columnType = (T)gridview.GetRow(gridview.GetSelectedRows()[0]); 
      PropertyInfo info = columnType.GetType().GetProperty(name); 
      if (info != null) 
      { // Here I got always null 
       info.GetValue(columnType, null); 
      } 
     } 
    } 

string valueOfStrx = GetCellValueByName<Foo>(grid, "strx"); 
+3

はあなたのサンプルのコードをクリーンアップしてくださいことができます。そうであるように、私が理解する限り、それは必要でないいくつかの行を含んでいるので、読むのは本当に難しいです。また、* type *や* typ *のような変数名は簡単に混同されます。あなたのコードが分かりやすいなら、良い答えを得る機会はずっと高いでしょう。 – Markus

+0

DataGridViewにカスタムオブジェクトを追加する場合、なぜデータバインディング自体で値にアクセスしないのですか?これは、文脈の欠如のために目的が何であるかを単純ではあるが、集めるのが難しいことを複雑にすること以上のようだ。 – Ambidex

+1

@Markus - こんにちは –

答えて

1

問題は、クラスFooで、strxフィールド(メンバ変数)であるということである:あなたの方法では

public string strx, stry; 

、あなたがGetPropertyを使用しようとするが、これはしませんフィールドを見つける:

PropertyInfo info = columnType.GetType().GetProperty(name); 

プロパティ

public string strx { get; set; } 
public string stry { get; set; } 

またはその代わりにGetFieldを使用する電子メンバー:

FieldInfo info = columnType.GetType().GetField(name); 
// ... 
info.GetValue(columnType); // Note that GetValue for a field does not take a second parameter 
関連する問題