2011-05-19 9 views
2
、私は以下のクラスを持っている

から派生しているかを判別しますか? TArgumentTypeやTReturnTypeの具体的なタイプがわからない。または私はちょうど周りに簡単なのtry/catchを実行する必要があります。genricどのタイプのオブジェクトが

var returnValue = object.ReturnValue; 
+0

この問題で実際に解決しようとしている問題を説明することはできますか? – ChrisWue

答えて

4

あなたはコンパイル時にタイプがわからない場合、それはタイプdynamicのでない限り、その後、foo.ReturnValueも、コンパイルされません。

あなたはこのようなものを使用することができます。このはややトリッキーで実装されたインタフェースを見つけるための仕事、しないこと

// Single type parameter 
bool x = ContainsGenericClassInHierarchy(foo, typeof(Command<>)); 
// Two type parameters 
bool y = ContainsGenericClassInHierarchy(foo, typeof(Command<,>)); 

注:

static bool ContainsGenericClassInHierarchy(object value, 
              Type genericTypeDefinition) 
{ 
    Type t = value.GetType(); 
    while (t != null) 
    { 
     if (t.IsGenericType 
      && t.GetGenericTypeDefinition() == genericTypeDefinition) 
     { 
      return true; 
     } 
     t = t.BaseType; 
    } 
    return false; 
} 

はこのようにそれを呼び出します。

+0

うわー、私の最初のJon Skeetの答え。私は光栄です;-)。魅力のように動作します。 type.BaseTypeをt.BaseTypeに変更するだけです。 –

+0

@ジョン:Doh - それは残念です。コンパイラのないマシンで答えるのが... –

関連する問題