2013-05-02 19 views
6

Muszę znaleźć, jeśli typ jest określony rodzaj ogólny.Sprawdź, czy dwa typy ogólne są równe

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

Ta kontrola nie działa, ale to jest to, co chcę sprawdzić. Jeśli typ jest tego rodzaju, niezależnie od tego, jaki jest T.

type == typeof(MyType<>) 

To działa, ale jest brudne. Może to być również błędne, ponieważ nie jest to FullName.

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

Zakładam, że istnieje sposób, aby to zrobić, ale nie znalazłem. Używanie IsAssignableFrom nie będzie działać, ponieważ muszę wiedzieć, czy bieżący typ, a nie jeden z jego rodziców, są równe.

Odpowiedz

6

To zadziała, jeśli konkretny typ obiektu to MyType<T>. Nie będzie działać dla wystąpień typów pochodzących z MyType<T> i nie zadziała, jeśli MyType<T> jest typem interfejsu.

if (type.IsGenericType 
    && type.GetGenericTypeDefinition() == typeof(MyType<>)) 
Powiązane problemy