Text šablony řídicí bloky
Řídicí bloky umožňují psát kód v šabloně text pro výstup lišit.Existují tři druhy řídicí bloky, které jsou odlišeny jejich počáteční závorky:
<# Standard control blocks #>může obsahovat příkazy.
<#= Expression control blocks #>mohou obsahovat výrazy.
<#+ Class feature control blocks #>může obsahovat metody, pole a vlastnosti.
Standardní řídicí blok
Standardní řídicí bloky obsahují příkazy.Například následující standardní blok získává názvy všech atributů v dokumentu XML:
<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System.Xml" #>
<#
List<string> allAttributes = new List<string>();
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"E:\CSharp\Overview.xml");
XmlAttributeCollection attributes = xDoc.Attributes;
if (attributes.Count > 0)
{
foreach (XmlAttribute attr in attributes)
{
allAtributes.Add(attr.Name);
}
}
#>
Můžete například vložit prostý text uvnitř složených if nebo for.Tento fragment například vygeneruje řádek v každé opakování smyčky:
<#
foreach (XmlAttribute attr in attributes)
{
#>
Found another one!
<#
allAtributes.Add(attr.Name);
}
#>
Upozornění |
---|
Vždy vymezení vnořené příkazy, které obsahují prostý text vložený pomocí {...}.Následující příklad nemusí správně fungovat: <# if (ShouldPrint) #> Some text. -- WRONG Místo toho by měly zahrnovat {závorek} takto: |
<#
if (ShouldPrint)
{ // "{" REQUIRED
#>
Some text.
<#
}
#>
Řídicí blok výraz
Výraz řídicí bloky jsou používány pro kód, který obsahuje řetězce k zápisu do výstupního souboru.Například s výše uvedený příklad Tisk názvů atributů do výstupního souboru změnou blok kódu:
<#
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"E:\CSharp\Overview.xml");
XmlAttributeCollection attributes = xDoc.Attributes;
if (attributes != null)
{
foreach (XmlAttribute attr in attributes)
{
#>
<#= attr.Name #>
<#
}
}
#>
Třída funkce řídicí blok
Bloky řízení funkce třídy můžete přidat metody, vlastnosti, polí nebo dokonce vnořené třídy do textu šablony.Nejčastěji bloky funkce třídy je poskytnout pomocné funkce pro kód v jiných částech textu šablony.Například následující blok třídy funkce převede první písmena názvu atributu (nebo pokud název obsahuje mezery, je počáteční písmeno každého slova):
<#@ import namespace="System.Globalization" #>
<#+
private string FixAttributeName(string name)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name);
}
#>
[!POZNÁMKA]
Blok řízení funkce třídy musí následovat není standardní řídicí bloky ve stejném souboru šablony.Toto omezení se však nevztahuje na výsledek použití <#@include#> směrnic.Součástí může mít každý soubor standardních bloků následuje bloky funkce třídy.
Můžete vytvořit funkci, která generuje výstup vložením textu a výraz bloků uvnitř bloku ovládací funkce třídy.Příklad:
<#+
private string OutputFixedAttributeName(string name)
{
#>
Attribute: <#= CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name) #>
<#+ // <<< Notice that this is also a class feature block.
}
#>
Tuto funkci nelze volat z standardní blok nebo jiného bloku funkce třídy:
<# foreach (Attribute attribute in item.Attributes)
{
OutputFixedAttributeName(attribute.Name);
}
#>
Jak používat řídicí bloky
Veškerý kód ve všech řídicí bloky standard a výraz v jedné šablony (včetně všech kód šablony zahrnuty) kombinovány do formuláře TransformText() metoda generovaný kód.(Další informace o zahrnutí jiných text šablony s include směrnice, viz T4 Text šablony směrnic.)
Jste měla mějte na paměti následující skutečnosti použijete řídicí bloky:
Jazyk. V textu šablony můžete použít buď C# nebo kódu jazyka Visual Basic.Je výchozí jazyk C#, ale můžete určit jazyka Visual Basic s language parametr template směrnice.(Další informace o template směrnice, viz T4 Text šablony směrnic.)
Jazyk, kterým v řídicí bloky nesouvisí s jazyk nebo formát textu, který generuje text šablony.Můžete generovat C# pomocí kódu nebo naopak versa jazyka Visual Basic.
Můžete použít pouze jeden jazyk daný text šablony, včetně všech text šablony zahrnují s include směrnice.
Místní proměnné. Protože blokuje veškerý kód řízení standard a výraz šabloně text generován jako jedinou metodu, je třeba určité, že neexistují žádné konflikty s názvy místních proměnných.Pokud včetně další text šablony Ujistěte se, zda jsou názvy proměnných jedinečné přes všechny zahrnuté šablony.Je to zajistit přidat řetězec do každé místní proměnné název identifikující text šablony, v němž bylo deklarováno.
Je také vhodné citelným hodnoty místní proměnné inicializovat, když deklarujete, zejména pokud jsou včetně více šablon text.
Vnoření řídicí bloky. Řídicí bloky nesmí být vnořené uvnitř navzájem.Daný ovládací prvek bloku musí ukončit, vždy před otevřením jiný.Například následující ukazuje, jak vytisknout jako součást standardní řídicí blok textu v bloku výraz.
<# int x = 10; while (x-- > 0) { #> <#= x #> <# } #>
Optimalizace struktury programu. S cílem zachovat text šablony krátký a snadno srozumitelné, je doporučeno vyhnout opakovanému kód faktoringu opakovaně kód do pomocné funkce v blocích funkce třídy nebo vytvoření vlastní text šablony třídy, která dědí z třídy Microsoft.VisualStudio.TextTemplating.TextTransformation.