【问题标题】:ASP.net C# Variable Declaration Inside IF BlockIF 块内的 ASP.net C# 变量声明
【发布时间】:2012-04-22 10:25:06
【问题描述】:

我尝试在 ASP.net C# 中使用以下代码:

@{
    var Host = Request.ServerVariables["HTTP_HOST"];
    if (Host.Contains("example.com")) {
        var Online = true;        
    }
    if (Online == true) {
        // Analytics Code
    }
}

但它返回错误。

我发现变量Online不能在外面使用,因为它的作用域仅限于声明它的IF语句。

通过反复试验,我发现以下代码有效:

@{
    var Host = Request.ServerVariables["HTTP_HOST"];
    if (Host.Contains("example.com")) {
        Page.Online = true;        
    }
    if (Page.Online == true) {
        // Analytics Code
    }
}

为什么第二个 sn-p 可以工作,尽管它不应该因为变量作用域预计会在关闭 IF 语句的 } 处结束?

谢谢

【问题讨论】:

    标签: c# .net razor scope dynamic-typing


    【解决方案1】:

    因为在第二条语句中,它没有声明一个变量,而只是设置它的值。 Page.Online 可能在 Page 本身的基类中声明和初始化。

    【讨论】:

      【解决方案2】:

      在线是一个变量

      var Online = true;
      

      页面是一个对象。它实际上是一个内置对象,属于您正在操作的 Web 请求上下文。它也是一个 dynamic 对象,这意味着它没有固定的类型。它的类型是在运行时推断出来的。

      Page.Online
      

      Page.Online 本身并不是一个变量。它是属于 Page 的动态属性。动态对象的一个​​特点是您可以为它们分配任何东西,以及所有任何方法,编译器不会抱怨。它将解析延迟到运行时,从上下文中推断出它的值。

      【讨论】:

      • 准确来说,Page.Online一个变量,只不过是Page的动态成员变量,声明在if的作用域之外陈述。事实上,Page 是外部作用域,允许您在 if 语句之外引用它的属性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      相关资源
      最近更新 更多