T4代码生成模板不行

时间:2010-09-23 02:11:31

标签: code-generation t4

我有一个模板片段,如下所示:

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

当length!=“0”时它工作正常,但当它为“0”时它会发出record.Substring(offset);代码确定但后面跟着文本“0”;“ (不带双引号)在下一行。看起来它正在发出片段“​​&lt;#= length#&gt;);”来自else块。我不明白为什么?

1 个答案:

答案 0 :(得分:2)

你应该总是在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 #>);
<#+ } #>