我正在尝试弄清楚我的网络格式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;
}
但感觉很乱。有更好的方法吗?
答案 0 :(得分:7)
您在寻找:
return targetType.IsAssignableFrom(page.GetType());
或者如果您在编译时知道类型:
if (page is MyPageType)
或者:
MyPageType myPage = page as MyPageType;
if (myPage != null)
{
// Use myPage
}