2011-09-18 138 views
5

我用“被”运营商,查找某一类:“是” - 运营商类型

for(int i=0; i<screens.Count; i++){ 
    if(screen is ScreenBase){ 
    //do something... 
    } 
} 

能正常工作特别是因为它认为,从基筛继承任何类,但是从没有基类基筛。

我愿做同样的,当我知道只有类型,不希望将类实例:

Type screenType = GetType(line); 
if (screenType is ScreenBase) 

但这comparsion产生的,因为它会比较“类型”级警告。

我知道的唯一选择是与== typeof比较,但这只会测试确切的类型而不是继承的类型。 有没有办法得到类似“is”运算符的类似行为,但对于Type-class描述的类型?

回答

5

如果你想具体知道它是否源自该类型,请使用Type.IsSubclassOf()。这不会工作的接口。

Type screenType = GetType(line); 
if (screenType.IsSubclassOf(typeof(ScreenBase))) 
{ 
    // do stuff... 
} 

否则,如果你想知道的类型可以被分配到某一类型的变量,使用Type.IsAssignableFrom()。这工作的接口。

Type screenType = GetType(line); 
if (typeof(ScreenBase).IsAssignableFrom(screenType)) // note the usage is reversed 
{ 
    // do stuff... 
} 

请注意,你不一定需要一个类型的对象,以确定这一点,你可以使用Type.IsInstanceOfType()对象的实例做到这一点。它的行为或多或少像IsAssignableFrom()

if (typeof(ScreenBase).IsInstanceOfType(line)) // note the usage is reversed 
{ 
    // do stuff... 
} 
11

我知道的唯一选择是与== typeof比较,但这只会测试确切的类型而不是继承的类型。有没有办法获得类似“is”操作符的类似行为,但对于Type类描述的类型?

如果GetType(line)返回类型(我推荐一个更好的名字为,顺便说一句),你可以使用Type.IsAssignableFrom

if (typeof(ScreenBase).IsAssignableFrom(GetType(line))) 
{ 
}