ASP.net C#变量声明在IF块内

时间:2012-04-22 10:25:07

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

我尝试在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
    }
}

为什么第二个片段有效,尽管它不应该,因为变量范围预计会在IF语句的结束}结束?

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

在线变量

var Online = true;

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

Page.Online

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