Sdílet prostřednictvím


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);
       }
#>
Poznámka k upozornění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.