から派生しているかを判別しますか? TArgumentTypeやTReturnTypeの具体的なタイプがわからない。または私はちょうど周りに簡単なのtry/catchを実行する必要があります。genricどのタイプのオブジェクトが
var returnValue = object.ReturnValue;
から派生しているかを判別しますか? TArgumentTypeやTReturnTypeの具体的なタイプがわからない。または私はちょうど周りに簡単なのtry/catchを実行する必要があります。genricどのタイプのオブジェクトが
var returnValue = object.ReturnValue;
あなたはコンパイル時にタイプがわからない場合、それはタイプ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;
}
はこのようにそれを呼び出します。
うわー、私の最初のJon Skeetの答え。私は光栄です;-)。魅力のように動作します。 type.BaseTypeをt.BaseTypeに変更するだけです。 –
@ジョン:Doh - それは残念です。コンパイラのないマシンで答えるのが... –
この問題で実際に解決しようとしている問題を説明することはできますか? – ChrisWue