我尝试在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语句的结束}
结束?
由于
答案 0 :(得分:3)
因为在第二个语句中,它不会声明一个变量,而只是设置它的值。 Page.Online
可能已在Page
本身的基类中声明并初始化。
答案 1 :(得分:3)
在线是变量:
var Online = true;
Page 是对象。它实际上是一个内置对象,属于您正在操作的Web请求上下文。它也是一个动态对象,这意味着它没有固定类型。它的类型是在运行时推断出来的。
Page.Online
Page.Online 不是这样的变量。它是属于Page的动态属性。动态对象的一个特性是你可以为它们分配任何东西,以及所有任何方法,并且编译器不会抱怨。它将解析延迟到运行时,其值从上下文中推断出来。