Если вы не знаете тип во время компиляции, то foo.ReturnValue
даже не скомпилируется, если только он не имеет тип dynamic
.
Вы можете использовать что-токак это:
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;
}
Назовите это так:
// Single type parameter
bool x = ContainsGenericClassInHierarchy(foo, typeof(Command<>));
// Two type parameters
bool y = ContainsGenericClassInHierarchy(foo, typeof(Command<,>));
Обратите внимание, что этот не будет работать для поиска реализованных интерфейсов, что несколько сложнее.