而不是这个.tt:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#@ assembly name="System"#>
<# message = "hello world" ; #>
blah blah blah etc. very complex example with embedded expression like
<#=message#>
我想要一个输出函数,它会返回输出等等等。
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#@ assembly name="System"#>
<#output();#>
<#+ output() { #>
blah blah blah etc. very complex example with embedded expression like
<#=message#>
<#}
#>
当然上面的语法不正确。怎么做?
答案 0 :(得分:7)
这是使用类功能块<#+ ... #>
的替代解决方案不。
在通常的语句块<# ... #>
中使用lambda表达式允许定义本地函数,如下所示:
<#@ template language="C#" #>
<#@ output extension=".txt" #>
<# Action output = () => { #>
loooooooong text <#= "message" #>
<# }; #>
<# output(); #>
此模板生成以下输出:
loooooooong text message
答案 1 :(得分:6)
实际上,你与你所拥有的非常接近。 我发现有必要记住模板本质上是一个C#/ VB类,所以当你使用&lt;#+#&gt;时阻止,你真的只是在课堂上添加一个成员。
一旦开始使用&lt;#+#&gt;表示法,你必须继续使用它,因为你仍然在成员级别向类中添加东西,而不是添加常规&lt; ##&gt;的TransformText()方法。标签。
正确的语法是
<#+ public void output() { #>
blah blah blah etc. very complex example with embedded expression like <#=message#>
<#+ }
#>