2012-01-10 2 views
1

愚かな質問かもしれませんが、リストのパラメータからすべてのプロパティを読み取ることはできますが、フィールドの値は<T>ではありません。Listフォームで汎用メソッドを読み取る方法

これは構造

public class TestRecord { 
      public string StringTest { get; set; } 
      public int IntegerTest { get; set; } 
      public DateTime DateTimeTest { get; set; } 
    } 

ジェネリックメソッドのテストコードをあなたの助けを

public void TestTCode() { 
     List<TestRecord> rec = new List<TestRecord>(); 
     rec.Add(new TestRecord() { 
      StringTest = "string", 
      IntegerTest = 1, 
      DateTimeTest = DateTime.Now 
     }); 
     TestOfT<TestRecord>(rec); 
    } 

おかげで、一般的な方法

public void TestOfT<T>(List<T> pList) where T:class, new() { 
     T xt = (T)Activator.CreateInstance(typeof(T)); 
     foreach (var tp in pList[0].GetType().GetProperties()) { 
     // System.Reflection.PropertyInfo pi = xt.GetType().GetProperty("StringTest"); 
     // object s = pi.GetValue(tp, null) ; -- failed 
      Debug.WriteLine(tp.Name); 
      Debug.WriteLine(tp.PropertyType); 
      Debug.WriteLine(tp.GetType().Name); 
     } 
    } 

です。

+0

? –

+1

あなたは '--failed'言うけど?それはコンパイルエラーまさに** **失敗しているのですか?ランタイム?何? –

+0

あなたはXT'ことを必要としません。 'インスタンスでは、' GetType() 'を呼び出しているだけなので。実際、どのインスタンスでも 'GetType()'を呼び出す必要はありません。あなたは 'typeof(T).GetProperties()'と言うことができます。 – phoog

答えて

1

問題は、あなたがvar xt = new T();として簡単に記述することができ、新たなインスタンスから値を(読んでいるです。

アイテムのプロパティを取得したい場合は、から値をプルする必要がありますインスタンスを正確にあなたの質問は何ですか。

void TestOfT<T>(IEnumerable<T> list) where T: class, new() 
{ 
    var properties = typeof(T).GetProperties(); 
    foreach (var item in list) 
    foreach (var property in properties) 
    { 
     var name = property.Name; 
     var value = property.GetValue(item, null); 
     Debug.WriteLine("{0} is {1}", name, value); 
    } 
} 
+0

おかげで、あまりにもこのヘルプ – kel

2
public void TestOfT<T>(List<T> pList) where T:class, new() { 
    var xt = Activator.CreateInstance(typeof(T)); 
    foreach (var tp in pList[0].GetType().GetProperties()) { 
     Debug.WriteLine(tp.Name); 
     Debug.WriteLine(tp.PropertyType); 
     Debug.WriteLine(tp.GetType().Name); 
     Debug.WriteLine(tp.GetValue(pList[0], null)); 
    } 
} 
+0

これは質問のコードのコピーのようです。ポイントは何ですか?それが動作 – Gabe

+0

感謝:)私の一日 – kel

+0

を救った私は今、私は私のミスがレコードであるべきGetValueメソッドにTPを渡した知られているのGetValue()メソッド:) – ivowiblo

関連する問題