15

我需要检查泛型类型参数TMyEntity它还是它的子类。

下面的代码会导致此编译器错误:

'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)
    {
    }
}
4

1 回答 1

21

您可以使用IsAssignableFrom方法 onType检查是否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
于 2013-01-13T10:52:15.190 回答