2013-05-02 21 views
6

タイプが特定のジェネリックタイプであるかどうかを調べる必要があります。2つのジェネリックタイプが等しいかどうか確認してください

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<>)) 
関連する問題