我需要检查泛型类型参数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)
| 归档时间: |
|
| 查看次数: |
7809 次 |
| 最近记录: |