我有其他人写的以下课程,我试图理解(我省略了这个例子不需要的代码):
public abstract class UserControl : System.Web.UI.UserControl
{
...
public virtual bool IsAadmin(TheUser theUser)
{
if (Page is Page)
return ((Page)Page).IsAadmin(theUser);
return false;
}
...
编辑:(注意:在stackoverflow中,Page
语句中的第一个if
突出显示为蓝色,但在visual studio中则不是这样。
在if
语句中,intellisense显示第一个页面的类型为System.Web.UI.Page Control.Page
,第二个Page
来自Something.Products.Web.Page
。当我通过代码调试时,它似乎没有进入这个if
语句,所以我想知道这个代码试图做什么?但更重要的是,Page
语句中的第一个if
来自(初始化)?我正在使用Resharper
,建议用
if
语句
var page = Page as Page;
if (page != null)
此更改显示通过它进行调试时页面为空。
答案 0 :(得分:2)
“第一页”实际上是您的抽象Page
继承的UserControl
类的UserControl
属性。它的类型为System.Web.UI.Page
,根据文档,返回
对包含服务器控件的Page实例的引用。
时,
is
关键字的计算结果为true
提供的表达式为非null,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。
似乎在调试代码时,已检查的UserControl
未包含在Something.Products.Web.Page
类型的页面中。
关于Resharper建议:在您的原始代码中,您实际上有两次使用Page
属性 - 首先是使用is
关键字时,第二个是明确地投射它时。使用Resharper生成的代码,强制转换仅发生一次。当if
语句的计算结果为true时,您可以确保page
变量包含对Something.Products.Web.Page
的引用,而不必再次强制转换它。