Вы можете использовать Type.IsAssignableFrom(Type)
. Однако ваш вопрос не совсем ясен - вы указываете один тип, но вам нужно два ... какой тип Bar
предназначен для проверки t
против?
Обратите внимание, что ответ изменится между .NET 3.5 и .NET 4 из-за общей ковариации - в .NET 3.5, например, List<Foo>
имеет значение , а не , назначаемое IEnumerable<Base>
, но в .NET 4 это так.
РЕДАКТИРОВАТЬ: Вот программа, которая печатает True, True, False, False. Я не уверен, почему вы ожидали, что второй будет ложным:
using System;
using System.Collections;
using System.Collections.Generic;
class Base{}
class Foo:Base{}
class Test
{
static bool Bar(Type t)
{
return typeof(IEnumerable<Base>).IsAssignableFrom(t);
}
static void Main()
{
Console.WriteLine(Bar(typeof(IEnumerable<Foo>)));
Console.WriteLine(Bar(typeof(IEnumerable<Base>)));
Console.WriteLine(Bar(typeof(string)));
Console.WriteLine(Bar(typeof(Foo)));
}
}