2012-04-22 2 views
0

Я пытался использовать следующий код в ASP.net C#:ASP.net C# Variable Декларация Внутри IF Блок

@{ 
    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 
    } 
} 

Почему это, что второй фрагмент кода работает, хотя это не должно, так как переменные прицелы, как ожидается, до конца при закрытии } И.Ф. заявления?

Благодаря

ответ

3

Потому что во 2-м заявлении, не объявить переменной, а только установить это значение. Page.Online был, вероятно, объявлен &, инициализированный в базовом классе самого Page.

3

Интернет является переменной:

var Online = true; 

Page является объект. Это фактически встроенный объект, который относится к контексту веб-запроса, в котором вы работаете. Это также динамический объект, что означает, что он не имеет фиксированного типа. Его тип выводится во время выполнения.

Page.Online 

Page.Online не является переменной как таковой. Это динамическое свойство, принадлежащее странице. Одна из особенностей динамических объектов заключается в том, что вы можете назначить им что-либо, и любой метод, и компилятор не будет жаловаться. Он отменяет разрешение до времени выполнения, где его значение выводится из контекста.

+1

Чтобы быть точным, 'Page.Online' * - это переменная, это просто динамическая членская переменная' Page', которая объявлена ​​вне области действия 'if'. Это факт, что 'Страница' находится во внешнем виде, что позволяет ссылаться на ее свойства вне выражения' if'. –

Смежные вопросы