我正在尝试弄清楚我的webforms Page是否是某种类型.
我有许多基类互相继承:
BasePage -> System.Web.UI.Page
CMSPage -> BasePage
Page -> CMSPage
Run Code Online (Sandbox Code Playgroud)
在自定义中UserControl,我需要获取页面,但前提是它来自CMSPage.
我试过了:
if(Page.GetType() == typeof(CMSPage))
Run Code Online (Sandbox Code Playgroud)
但GetType()的值只返回页面的类名.看起来我需要这样做:
if(Page.GetType().BaseType.BaseType == typeof(CMSPage))
Run Code Online (Sandbox Code Playgroud)
让比赛奏效.但是,有些页面在BaseType达到类型之前处于不同的级别CMSPage.
我可以创建一个这样的函数来遍历每个函数,BaseType直到找到正确的函数:
public static bool IsPageTypeOf(this System.Web.UI.Page page, Type targetType)
{
var pageType = page.GetType();
if (pageType == targetType)
return true;
while (pageType.BaseType != null)
{
if (pageType.BaseType == targetType)
return true;
pageType = pageType.BaseType;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但它感觉很乱.有一个更好的方法吗?
你在找:
return targetType.IsAssignableFrom(page.GetType());
Run Code Online (Sandbox Code Playgroud)
或者,如果您在编译时知道类型:
if (page is MyPageType)
Run Code Online (Sandbox Code Playgroud)
要么:
MyPageType myPage = page as MyPageType;
if (myPage != null)
{
// Use myPage
}
Run Code Online (Sandbox Code Playgroud)