我有一个方法,
public function DoSomethingGenricWithUIControls(ByVal incomingData As Object)
//Fun Stuff
End Function
此方法将被调用,并且可以传递Page
,UserControl
或任何其他类型。
我想检查传入对象的类型,如果它是Page
,UserControl
或其他类型。
但我无法做到这一点。每当我尝试在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)
答案 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();
...
}