Шаблон генерации кода T4 не работает

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

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

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


person user380689    schedule 23.09.2010    source источник


Ответы (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 #>);
<#+ } #>
person Athari    schedule 26.10.2010
comment
Согласны, скобки обычно необходимы. Отличный способ диагностировать подобные проблемы - поместить тот же код шаблона в предварительно обработанный шаблон, а затем взглянуть на сгенерированный базовый класс шаблона. Обычно в этот момент вы можете довольно быстро обнаружить проблему. - person GarethJ; 04.12.2010