2013-05-02 61 views
6

我需要查找某個類型是否爲某個通用類型。檢查兩個通用類型是否相等

class MyType<T> {} 
var instance = new MyType<int>(); 
var type = instance.GetType(); 

此檢查不起作用,但這是我想檢查。如果該類型屬於該類型,則不管T是什麼。

type == typeof(MyType<>) 

這是行得通的,但感覺很髒。這也可能是錯誤的,因爲它不是FullName

type.Name == typeof(MyType<>).Name 

我假設有一種方法可以做到這一點,但我還沒有找到。使用IsAssignableFrom將不起作用,因爲我需要知道當前類型是否相同,而不是其中一個父類。

回答

6

如果對象的具體類型爲MyType<T>,這將起作用。它不適用於來自MyType<T>的類型的實例,如果MyType<T>是接口類型,則不起作用。

if (type.IsGenericType 
    && type.GetGenericTypeDefinition() == typeof(MyType<>))