“是”运算符如何在内部工作

时间:2010-05-24 15:33:14

标签: .net

我想将对象的类型与类型进行比较,看它们是否相同。我没有对象,只有对象的类型。

我可以做type1 == type2并获得一般平等

我可以有一个递归循环,我在type1.BaseType重复上述步骤,直到BaseType为空。

我可以type1.GetInterface( type2.FullName ) != null检查type2是否是type1的接口

如果我把它们放在一起,我就会

if ( type2.IsInterface )
  return type1.GetInterface( type2.FullName ) != null;

while ( type1 != null ) {
  if ( type1 == type2 )
    return true;

  type1 = type1.BaseType;
}
return false;

所有is关键字都是。我无法找到正确的关键字插入Reflector搜索以找到该功能,谷歌搜索“是”并没有真正的帮助

1 个答案:

答案 0 :(得分:6)

isthe standard的§14.9.10)通常使用isinst,但如果编译时类型通过某些转换兼容,则不需要。

Type对象的等效(反向)是IsAssignableFrom。所有这些都是真的:

"foo" is String;
"foo" is object;

typeof(String).IsAssignableFrom("foo".GetType());
typeof(object).IsAssignableFrom("foo".GetType());