我需要检查泛型类型参数T
是MyEntity
还是其子类。
以下代码导致此编译器错误:
'T' is a 'type parameter' but is used like a 'variable'
如何解决?
public class MyEntity { }
static void Test<T>()
{
// Error 34 'T' is a 'type parameter' but is used like a 'variable'
if (T is MyEntity)
{
}
}
答案 0 :(得分:21)
您可以在IsAssignableFrom
上使用Type
方法检查是否可以将一个Type
分配给另一个人。{/ p>
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