2017-01-25 4 views
0

Хорошо, это может показаться странным, но мне нужно проверить, прошел ли мне код object типа ModelItem<T>, где мне все равно, что на самом деле T. Другими словами, если это ModelItem<int>, ModelItem<string> или ModelItem<Foo>, тогда мне нужно вернуть true.Можно ли тестировать базу общего?

Примечание: Если бы я был владельцем ModelItem<T>, я думаю, просто определить интерфейс типа IModelItem и назначить его в качестве части ModelItem<T> определения, но у меня нет доступа к источнику.

ответ

2

Конечно, это возможно:

public bool IsIt(object thing) 
{ 
    var type = thing.GetType(); 
    if (type.IsGenericType) 
    { 
     return type.GetGenericTypeDefinition() == typeof(MyThing<>); 
    } 
    return false; 
} 

тестирования:

IsIt(new MyThing<int>()).Dump(); 
IsIt(new MyThing<string>()).Dump(); 
IsIt(new MyThing<Foo>()).Dump(); 
IsIt(5).Dump(); 

Возвращает

True 
True 
True 
False 
Смежные вопросы