2
这是一个相当普遍的问题,但我所做的具体事情很简单,所以我包含代码。当我不知道编译时的类型时,如何检查两个对象之间的类型兼容性?在运行时检查对象类型兼容性
也就是说,当SomeType
是编译时已知的类型名称时,我可以做if (object is SomeType)
。 GetType()
是不够的,因为它不适用于派生类型。基本上我想能够说,if (object.IsTypeOfOrIsDerivedFrom(someType))
这个神奇的方法的信号是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;
}
'Foo'和'Bar'是类型 - 我需要比较实例的类型,例如, 'var foo == new Foo(); type bar = typeof(someType);'...是'foo'类型与'bar'兼容吗? – 2011-03-11 14:00:37
如果您无法表达演员或比较(例如'if(someInstance is Foo)'或'Foo checkInstance = someInstance as Foo'),则需要获取类型。因此,在上面的示例中,您需要检查foo.GetType()并将其与'IsAssignableFrom'一起使用。 – 2011-03-11 16:10:37