首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建一个封装T4模板文本部分的方法?

如何创建一个封装T4模板文本部分的方法?
EN

Stack Overflow用户
提问于 2011-01-10 01:37:01
回答 2查看 2.1K关注 0票数 5

而不是这个.tt:

代码语言:javascript
复制
<#@ 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#>

我希望有一个输出函数,可以返回输出等等:

代码语言:javascript
复制
    <#@ 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#>

   <#}
   #>

当然上面的语法是不正确的。该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2014-05-24 08:40:16

这是一个使用类功能块<#+ ... #>而不是的替代解决方案。在通常的语句块<# ... #>中使用lambda表达式允许按如下方式定义局部函数:

代码语言:javascript
复制
<#@ template language="C#" #>
<#@ output extension=".txt" #>

<# Action output = () => { #>
loooooooong text <#= "message" #>
<# }; #>

<# output(); #>

此模板生成以下输出:

代码语言:javascript
复制
loooooooong text message
票数 8
EN

Stack Overflow用户

发布于 2011-01-20 10:18:19

实际上,你已经非常接近你所拥有的东西了。我发现记住这个模板本质上是一个隐藏在幕后的C#/VB类是很有帮助的,所以当您使用<#+ #>块时,您实际上只是向该类添加了一个成员。

一旦开始使用<#+ #>表示法,就必须继续使用它,因为您仍然是在成员级别向类添加内容,而不是像常规的<# #>标记那样添加TransformText()方法。

正确的语法应该是

代码语言:javascript
复制
<#+ public void output() { #>
blah blah blah etc. very complex example with embedded expression like     <#=message#>

<#+ }
#>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4640623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档