0

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番目のスニペットが機能するはずがないのになぜこれが機能するのですか?

ありがとう

4

2 に答える 2

3

2番目のステートメントでは、変数を宣言せず、値を設定するだけだからです。Page.OnlineおそらくPageそれ自体の基本クラスで宣言および初期化されました。

于 2012-04-22T10:26:55.190 に答える
3

オンライン変数です

var Online = true;

ページオブジェクトです。これは、実際には、操作しているWeb要求コンテキストに属する組み込みオブジェクトです。動的オブジェクトでもあるため、固定タイプはありません。そのタイプは実行時に推測されます。

Page.Online

Page.Online自体は変数ではありません。これは、Pageに属する動的プロパティです。動的オブジェクトの機能の1つは、オブジェクトとすべてのメソッドに何でも割り当てることができ、コンパイラーが文句を言わないことです。実行時まで解決を延期し、実行時にその値がコンテキストから推測されます。

于 2012-04-22T10:39:03.743 に答える