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

本文关键字:变量 声明 net IF ASP | 更新日期: 2023-09-27 18:31:58

我尝试在 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 语句的关闭}结束?

谢谢

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

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

Online 是一个变量

var Online = true;

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

Page.Online

Page.Online 本身不是一个变量。 它是属于 Page 的动态属性。 动态对象的一个功能是,您可以为它们分配任何内容以及所有方法,并且编译器不会抱怨。 它将解析推迟到运行时,在运行时,其值是从上下文推断出来的。