2012-09-08 97 views
1

我需要通過反射來獲取通用參數的通用類型。但是真正的類型,而不是類型{Name =「T」;全名= NULL}如何通過反射獲得通用參數的類型

public void Sample<T>(T i, object o) 
{ 
    MethodBase basee = MethodBase.GetCurrentMethod(); 
    Type[] types = basee.GetGenericArguments(); 
} 

,但我不能使用的typeof(T),因爲我使用反射

有沒有一種方法(使用反射),以獲得通用的參數類型類型。

// in this case i should get (Type) { Name="Int32" ; FullName="System.Int32" } 
myClassObj.Sample(10, new object()); 

在其他千卡,我whant知道如何調用使用typeof調用的方法(T)例如:

// in Il code I see that the compiler use: 
// ldtoken !!T => this should get the RuntimeTypeHandle needed as parameter 
// System.Type::GetTypeFromHandle(valuetype System.RuntimeTypeHandle) 
Type t = Type.GetTypeFromHandle(? ? ?); 

我怎麼會從T通用參數得到RuntimTypeHandle

+1

爲什麼你不能使用'i.GetType()'?對於這個問題,爲什麼你不能使用typeof(T)?這會告訴你這是一個整數。 – aquinas

+0

價值我可以是空的,並使崩潰...:S –

+1

公平的。但爲什麼不輸入typeof(T)? – aquinas

回答

4

我不知道這一切的地步,但對於

public void Sample<T>(T i, object o) 
{ 
    Type t = typeof(T); 
    if (i != null) 
    { 
    t = i.GetType(); 
    } 

    // Do whatever with t 
    Console.WriteLine(t); 
} 

那麼你已經有了運行時類型(如果有對象),否則你有靜態類型。

+0

+1(恭喜2000分),但我會建議一個更緊湊的表達式:'Type t = i == null? typeof(T):i.GetType();'。 – phoog

相關問題