如何修复'T'是'类型参数',但用作'变量'编译错误

And*_*rus 15 c#

我需要检查泛型类型参数T是否是MyEntity它的子类.

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

'T' is a 'type parameter' but is used like a 'variable'
Run Code Online (Sandbox Code Playgroud)

怎么修?

public class MyEntity { }

static void Test<T>()
{
    // Error    34  'T' is a 'type parameter' but is used like a 'variable'
    if (T is MyEntity)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Ily*_*nov 21

您可以使用IsAssignableFrom方法Type来检查是否Type可以将其分配给另一个.

if (typeof(MyEntity).IsAssignableFrom(typeof(T)))
Run Code Online (Sandbox Code Playgroud)

注意:如果你想要一个T可以MyEntity或它的子类,你可以定义泛型约束,如下所示:

static void Test<T>() where T : MyEntity
{

}
Run Code Online (Sandbox Code Playgroud)

代码就像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");
}
Run Code Online (Sandbox Code Playgroud)

例子:

F<IList>();       //prints IList is IEnumerable
F<IEnumerable>(); //prints IEnumerable is IEnumerable
F<object>();      //prints object is not IEnumerable
Run Code Online (Sandbox Code Playgroud)