2010-09-23 6 views
1

J'ai un fragment de modèle qui ressemble à ceci:Code T4 modèle de génération ne se comporte pas

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

Lorsque la longueur = « 0 » il fonctionne très bien, mais quand il est « 0 », il émet le record.Substring! (décalage); code ok mais suivi du texte "0"; " (sans les guillemets) sur la ligne suivante. On dirait qu'il émet le fragment "< # = longueur #>);" du bloc d'ailleurs. Je ne comprends pas pourquoi?

Répondre

2

Vous devez toujours utiliser des crochets dans T4.

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

traduit à quelque chose comme

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

C'est pourquoi les sorties "else" que la première partie.

Votre code devrait ressembler à ceci:

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

D'accord, les crochets sont généralement nécessaires. Un excellent moyen de diagnostiquer des problèmes de ce type consiste à placer le même code de modèle dans un modèle prétraité, puis à examiner la classe de modèle sous-jacente générée. Vous pouvez généralement repérer le problème assez rapidement à ce moment-là. – GarethJ

Questions connexes