如果Page是自定义类的类型

Dan*_*lis 1 c# asp.net

我正在尝试弄清楚我的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)

但它感觉很乱.有一个更好的方法吗?

Jon*_*eet 7

你在找:

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)