【问题标题】:T4 code generation template not behavingT4 代码生成模板不正常
【发布时间】:2010-10-27 05:03:07
【问题描述】:

我有一个看起来像这样的模板片段:

<#+
if (length == "0") 
#>  return record.Substring(offset);
<#+
else 
#>  return record.Substring(offset, <#= length #>);

当 length != "0" 它工作正常,但是当它是 "0" 它发出记录。Substring(offset);代码没问题,但后面跟着文本“0);” (没有双引号)在下一行。看起来它正在发出片段“​​);”从其他块。我不明白为什么?

【问题讨论】:

    标签: code-generation t4


    【解决方案1】:

    您应该始终在 T4 中使用方括号。

    return record.Substring(offset, <#= length #>);
    

    翻译成类似的东西

    Write("return record.Substring(offset, ");
    Write(length);
    Write(");");
    

    这就是“else”只输出第一部分的原因。

    你的代码应该是这样的:

    <#+ if (length == "0") { #>
      return record.Substring(offset);
    <#+ } else { #>
      return record.Substring(offset, <#= length #>);
    <#+ } #>
    

    【讨论】:

    • 同意,通常需要括号。诊断此类问题的一个好方法是将相同的模板代码放入预处理的模板中,然后查看生成的底层模板类。那时您通常可以很快发现问题。
    猜你喜欢
    • 2013-10-03
    • 2010-09-22
    • 2017-06-06
    • 1970-01-01
    • 2019-05-08
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多