我在运行时文本模板中有这段代码
<#= Power(); #>
这应该调用一个函数,该函数在模板定义的同一个类中定义。
public partial class GallerySpecsTemplate
{
// private fields, constructor removed
private string Power()
{
string line;
// line gets calculated
return line;
}
}
我100%确定它是正确的类,因为模板的其他部分正在使用该类中的私有变量。
为什么我会收到4个编译错误以及如何修复它们?
Error 1 ) expected
Error 2 Invalid expression term ')'
Error 3 ; expected
Error 4 Invalid expression term ')'
当我删除该行时,所有4个错误都会消失。
如果我将方法Power
从部分类定义中移除到模板末尾作为类特征控制块,我会得到相同的错误。
答案 0 :(得分:2)
<#= expr #>
语法内部需要expression
,而不是statement
,这是因为它已编译为output.Write( expr );
。
...所以,如果你放<#= SomeFunction(); #>
,那么它将被编译为output.Write( SomeFunction(); );
,这是一个明显的语法错误。
只需删除;
即可。简单地说:分号是将C#expression
转换为C#statement
的原因。
在ASPX语法中也是如此,其中<%= expr %>
只接受表达式而不是语句(它被编译为Response.Write( expr );
)。