2012-10-19 79 views
2

假設我有一個泛型類型的運行時對象和相同類的原始泛型類型,例如,如何從類型參數的泛型類型中提取原始泛型類型

var type = (new List<Int32>()).GetType(); 
var genericListType = typeof(List<>); 

我需要一種方法GetRawGenericType,使表達

GetRawGenericType(type) == genericListType 

返回true。有沒有辦法來實現這個?

備註:

我不知道的對象的類型,它可能是任何泛型類型。 在我寫我必須知道確切的泛型類型,因爲它會被用來作爲一個字典的關鍵,例如代碼:

private readonly Dictionary<Type, TValue> Mapping = 
    new Dictionary<Type, TValue> { 
      {typeof(IEnumerable<>), *SomeValue*}, 
      ... 
     } 

預先感謝您花費的時間。

+0

BTW您的第一線可能是簡單的'變種類型= typeof運算(名單);' – AakashM

+0

@AakashM:如果在第一類型線實際上是已知的,那麼整個問題是毫無意義的。這可能類似於'var type = someObjectSentToAMethod.GetType();'。 – Guffa

+0

@Guffa謝謝) – danyloid

回答

3

使用GetGenericTypeDefinition method

var type = (new List<Int32>()).GetType(); 
var genericListType = typeof(List<>); 

Console.WriteLine(type.GetGenericTypeDefinition() == genericListType); 

顯示

true