运行时文本模板 - 奇怪的错误

时间:2017-06-14 19:58:55

标签: c# templates

我在运行时文本模板中有这段代码

  <#= 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从部分类定义中移除到模板末尾作为类特征控制块,我会得到相同的错误。

1 个答案:

答案 0 :(得分:2)

<#= expr #>语法内部需要expression,而不是statement,这是因为它已编译为output.Write( expr );

...所以,如果你放<#= SomeFunction(); #>,那么它将被编译为output.Write( SomeFunction(); );,这是一个明显的语法错误。

只需删除;即可。简单地说:分号是将C#expression转换为C#statement的原因。

在ASPX语法中也是如此,其中<%= expr %>只接受表达式而不是语句(它被编译为Response.Write( expr );)。