这是一个非常普遍的问题,但我正在做的具体事情很简单,所以我包含了代码。当我在编译时不知道两个对象的类型时,如何检查两个对象之间的类型兼容性?
也就是说,我可以做if (object is SomeType)
when SomeType
是编译时已知的类型名称。GetType()
是不够的,因为它不适用于派生类型。基本上我想说的是,if (object.IsTypeOfOrIsDerivedFrom(someType))
这个神奇方法的 sig 是哪里IsTypeOfOrIsDerivedFrom(Type type)
这是上下文。
// Return all controls that are (or are derived from) any of a list of Types
public static IEnumerable<Control> FindControls(this Control control, IEnumerable<Type> types, bool recurse)
{
foreach (Control ctl in control.Controls)
{
/// How can I compare the base types of item & ctl?
if (types.Any(item=> .... ))
{
yield return (ctl);
}
if (recurse && ctl.Controls.Count > 0)
{
IEnumerable<Control> subCtl = ctl.FindControls(types,true);
if (subCtl != null)
{
yield return (subCtl);
}
}
}
yield break;
}
您可以使用,Type.IsAssignableFrom
e.g.
public class Foo { }
public class Bar : Foo { }
...
bool compatible = typeof(Foo).IsAssignableFrom(typeof(Bar));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)