Шаблон генерации кода T4 не ведет себя - PullRequest
1 голос
/ 23 сентября 2010

У меня есть фрагмент шаблона, который выглядит следующим образом:

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

Когда length! = "0", он работает нормально, но когда он равен "0", он создает запись. Substring (offset); Код в порядке, но затем следует текст "0);" (без двойных кавычек) на следующей строке. Похоже, что он излучает фрагмент "<# = length #>);" из остального блока. Я не понимаю, почему?

1 Ответ

2 голосов
/ 27 октября 2010

Вы всегда должны использовать скобки в 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 #>);
<#+ } #>
...