Welcome 微信登录

首页 / 网页编程 / ASP.NET / Razor内幕之表达式

Razor内幕之表达式2012-02-01 博客园 译:镜涛我们看一下之前例子中的代码:<li>@p.Name ($@p.Price)</li>是如何解析的。 当遇到"<li>"字符序列的时候,解析器知道正在解析一个以"</li>"为结束标志的标记。然后标记解析器在解析到结束标志之前发现了一个"@"字符,就像"@foreach"一样,再次切换到代码解析器。这时和之前的解析有些不同,C#代码解析器发现第一个标识符"p"时,它会检查这个标识符是不是C#的关键字;当然"p"并不是C#关键字,所以代码解析器进入"隐式表达式"模式。解析隐式表达式的算法看起来是这样的:

首先读取一个标识符,

下一个字符是"("或者"["?

是则读到匹配的")"或者"]",然后跳到2

不是则继续3

下一个字符是"."?

是则继续4

不是则结束表达式

"."后面的字符是合法的C#标识符的开始?

是则读取"."并跳到1

不是则不读"."并结束表达式

总体来说就是:一个隐式表达式就是一个标识符,之后可以跟任意数量的方法调用("()")、索引表达式("[]")及成员访问表达式(".")。但是,除了在"()"或者"[]"里面,是不允许空格存在的。例如,下面是一些合法的Razor隐式表达式:

@p.Name
@p.Name.ToString()
@p.Name.ToString()[6 - 2]
@p.Name.Replace("ASPX", "Razor")[i++]