15

ジェネリック型パラメーターがそれであるか、そのサブクラスであるかを確認する必要があり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)
    {
    }
}
4

1 に答える 1

21

IsAssignableFromメソッドonを使用して、1つを別の1つに割り当てることができる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
于 2013-01-13T10:52:15.190 に答える