Ответ 1
Вы можете использовать метод IsAssignableFrom
на Type
, чтобы проверить, может ли один Type
присваиваться другому.
if (typeof(MyEntity).IsAssignableFrom(typeof(T)))
Примечание. Если вы хотите, чтобы T
мог только быть MyEntity
или подклассы, вы можете определить общее ограничение, например:
static void Test<T>() where T : MyEntity
{
}
И код типа Test<object>()
даже не компилирует
Вы можете проверить IsAssignableFrom
на этот код:
public static void F<T>()
{
var isAssignable = typeof(IEnumerable).IsAssignableFrom(typeof(T));
Console.WriteLine ("{0} is {1} IEnumerable", typeof(T).Name, isAssignable ? "" : "not");
}
Примеры:
F<IList>(); //prints IList is IEnumerable
F<IEnumerable>(); //prints IEnumerable is IEnumerable
F<object>(); //prints object is not IEnumerable