0

我有以下由我试图理解的其他人编写的类(我省略了此示例不需要的代码):

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;
        }
...

编辑:(注意:在stackoverflowPage中,if语句中的第一个突出显示为蓝色,但在Visual Studio中不是)

if语句中智能感知显示第一个 Page 是 type System.Web.UI.Page Control.Page,第二个Page是 from Something.Products.Web.Page。当我通过代码进行调试时,它似乎没有进入这个if语句,所以我想知道这段代码试图做什么?但更重要的是,声明Page中的第if一个来自哪里(初始化)?我正在使用Resharper,它建议if

var page = Page as Page;
if (page != null)

此更改显示在通过它进行调试时页面为空。

4

1 回答 1

2

“第一页”实际上是您的抽象继承Page的类的属性。它是类型,并且根据文档,返回UserControlUserControlSystem.Web.UI.Page

对包含服务器控件的 Page 实例的引用。

is关键字在以下情况下计算为真

提供的表达式是非空的,并且提供的对象可以强制转换为提供的类型而不会引发异常。

似乎在调试代码时,检查UserControl的内容不包含在 type 的页面中Something.Products.Web.Page

关于 Resharper 的建议:在您的原始代码中,您有效地转换了Page属性两次 - 第一次是使用is关键字时,第二次是显式地转换它。使用 Resharper 生成的代码,转换只发生一次。当if语句的计算结果为真时,您可以确定该page变量持有对的引用,Something.Products.Web.Page而不必再次强制转换它。

于 2012-07-05T06:32:20.803 回答