mic*_*ael 6 .net c# types typeof
我使用"is"运算符来查找某个类:
for(int i=0; i<screens.Count; i++){
if(screen is ScreenBase){
//do something...
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,特别是当它找到任何继承自ScreenBase的类而不是ScreenBase的基类时.
当我只知道Type并且不想实例化类时,我想做同样的事情:
Type screenType = GetType(line);
if (screenType is ScreenBase)
Run Code Online (Sandbox Code Playgroud)
但是这个比较产生了一个警告,因为它将与"类型"类进行比较.
我知道的唯一选择是与== typeof进行比较,但这只会测试确切的类型而不是继承的类型.有没有办法获得类似"is"运算符的类似行为,但对于Type-class描述的类型?
Ree*_*sey 11
我知道的唯一选择是与== typeof进行比较,但这只会测试确切的类型而不是继承的类型.有没有办法获得类似"is"运算符的类似行为,但对于Type-class描述的类型?
如果GetType(line)返回一个类型(我建议一个更好的名称,顺便说一下),你可以使用Type.IsAssignableFrom:
if (typeof(ScreenBase).IsAssignableFrom(GetType(line)))
{
}
Run Code Online (Sandbox Code Playgroud)
如果您想具体了解它是否来自类型,请使用Type.IsSubclassOf().这不适用于接口.
Type screenType = GetType(line);
if (screenType.IsSubclassOf(typeof(ScreenBase)))
{
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
否则,如果您想知道是否可以将类型分配给某种类型的变量,请使用Type.IsAssignableFrom().这将对于接口工作.
Type screenType = GetType(line);
if (typeof(ScreenBase).IsAssignableFrom(screenType)) // note the usage is reversed
{
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
请注意,您不一定需要类型对象来确定这一点,您可以使用对象的实例来执行此操作Type.IsInstanceOfType().它的行为或多或少会像IsAssignableFrom().
if (typeof(ScreenBase).IsInstanceOfType(line)) // note the usage is reversed
{
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)