是否有可能测试通用的基础?

时间:2017-01-25 05:34:34

标签: c# generics typechecking

好吧,这可能听起来很奇怪,但我需要测试传递给我的objectModelItem<T>类型,我不关心T实际上是什么。换句话说,如果它是ModelItem<int>ModelItem<string>ModelItem<Foo>,那么我需要返回true

注意:如果我是ModelItem<T>的所有者,我认为只需定义IModelItem类型的界面并将其指定为ModelItem<T>定义的一部分,但我不会&# 39;可以访问来源。

1 个答案:

答案 0 :(得分: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