如何将继承类型与Base Type进行比较?

时间:2015-11-06 07:48:36

标签: c# vb.net reflection types

我有一个方法,

public function DoSomethingGenricWithUIControls(ByVal incomingData As Object)
     //Fun Stuff
End Function

此方法将被调用,并且可以传递PageUserControl或任何其他类型。

我想检查传入对象的类型,如果它是PageUserControl或其他类型。

但我无法做到这一点。每当我尝试在GetType()上使用typeOf()的{​​{1}}时。它给出了,

System.Web.UI.UserControl

当我尝试其他方法时,例如'UserControl' is a type in 'UI' and cannot be used as an expression. .IsAssignableFrom(),但我仍然无法做到这一点。

另外请注意,我的传入.IsSubclassOf()usercontrols可以是从不同控件/页面继承的多个。所以它的直接基类型不是page的类型。

如果有任何混淆,请告诉我。 VB / C#任何方式对我都有用。

更新

我试过了,

System.Web.UI.<Type>

这给了我同样的问题,

 if( ncomingPage.GetType() Is System.Web.UI.UserControl)

1 个答案:

答案 0 :(得分:3)

而不是

if( ncomingPage.GetType() is System.Web.UI.UserControl)

你必须使用

// c#
if( ncomingPage is System.Web.UI.UserControl)
// vb.net fist line of code in my life ever! hopefully will compile
If TypeOf ncomingPage Is System.Web.UI.UserControl Then

注意没有获取对象类型。 is在蹄下为你做这件事。

您可以使用简单的as/null检查模式检查类型:

var page = ncomgingPage as UserControl;
if(page != null)
{
    ... // ncomingPage is inherited from UserControl
}

它比使用is更有效(只有单一演员),因为你可能会做类似的事情

// checking type
if( ncomingPage is System.Web.UI.UserControl)
{
    // casting
    ((UserControl)ncomingPage).SomeMethod();
    ...
}