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

时间:2013-01-13 10:50:04

标签: c#

我需要检查泛型类型参数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)
    {
    }
}

1 个答案:

答案 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