如果Page是自定义类的类型

时间:2012-03-06 22:09:48

标签: c# asp.net

我正在尝试弄清楚我的网络格式Page是否属于某种类型。

我有许多相互继承的基类:

BasePage -> System.Web.UI.Page
CMSPage -> BasePage
Page -> CMSPage

在自定义UserControl中,我需要获取该页面,但前提是它来自CMSPage

我试过了:

if(Page.GetType() == typeof(CMSPage))

但GetType()的值只返回页面的类名。看起来我需要这样做:

if(Page.GetType().BaseType.BaseType == typeof(CMSPage))

让比赛正常进行。但是,某些页面在达到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;
}

但感觉很乱。有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

您在寻找:

return targetType.IsAssignableFrom(page.GetType());

或者如果您在编译时知道类型:

if (page is MyPageType)

或者:

MyPageType myPage = page as MyPageType;
if (myPage != null)
{
    // Use myPage
}