1
ウェブフォームPage
が特定のタイプであるかどうかを試しています。Pageがカスタムクラスのタイプである場合
私は互いを継承する基底クラスの数持っている:カスタムUserControl
で
BasePage -> System.Web.UI.Page
CMSPage -> BasePage
Page -> CMSPage
を、私はページを取得する必要があり、それはCMSPage
から派生している場合のみ。
私が試した:
if(Page.GetType() == typeof(CMSPage))
しかしメソッドGetType(の値)だけでページのクラス名を返します。私がする必要があるように見えます:
if(Page.GetType().BaseType.BaseType == typeof(CMSPage))
マッチを働かせるには。ただし、一部のページはレベルにあり、タイプは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は私のお気に入りであることそれを使って何かしたいと思っていました。私はすでに強く型付けされた参照を用意しています。 – n8wrl
提案をありがとう。私は 'page is MyPageType'と' MyPageType myPage = page as MyPageType'を試しましたが、 'MyPageType'から派生していないページでさえ、' myPage'を 'null'ではなく返していました。 'if(type of(CMSPage).IsAssignableFrom(Page.GetType()))'が扱われました!私はちょうどこれを渡って来た: 'if(Page.IsPageTypeOf(typeof(CMSPage)))'両方ともうまくいくかどうか分からない。 –
@Scrooby:あなたは間違ったことをしています。確かにasはうまくいくからです。適切な型ではないオブジェクトへの参照に対してnull以外の結果を与えることはできません。型の安全性に違反します。 –