2017-01-25 7 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 
関連する問題