2011-01-09 4 views
5
इस .tt के बजाय

:टी 4 टेम्पलेट टेक्स्ट सेक्शन को एन्सेप्लेट करने वाली विधि कैसे बनाएं?

<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ import namespace="System.IO" #> 
<#@ output extension=".txt" #> 
<#@ assembly name="System"#> 

<# message = "hello world" ; #> 

blah blah blah etc. very complex example with embedded expression like 
<#=message#> 

मैं एक आउटपुट समारोह है कि उत्पादन, ऐसा आदि .:

<#@ template debug="false" hostspecific="true" language="C#" #> 
    <#@ import namespace="System.IO" #> 
    <#@ output extension=".txt" #> 
    <#@ assembly name="System"#> 

    <#output();#> 

    <#+ output() { #> 
    blah blah blah etc. very complex example with embedded expression like 
    <#=message#> 

    <#} 
    #> 

बेशक वाक्य रचना के ऊपर सही नहीं है वापसी होगी करना चाहते हैं। यह कैसे करना है ?

उत्तर

6

दरअसल आप वहां जो कुछ मिला है उससे बहुत करीब हैं। मुझे लगता है कि यह याद रखने में मदद करता है कि टेम्पलेट अनिवार्य रूप से एक सी #/वीबी कक्षा हुड के नीचे है, इसलिए जब आप < # + #> ब्लॉक का उपयोग करते हैं, तो आप वाकई कक्षा में सदस्य जोड़ रहे हैं।

एक बार जब आप < # + #> नोटेशन का उपयोग करना शुरू कर देते हैं, तो आपको इसका उपयोग करना जारी रखना होगा, क्योंकि आप अभी भी सदस्य स्तर पर कक्षा में सामान जोड़ रहे हैं, ट्रांसफ़ॉर्म टेक्स्ट() विधि को नियमित रूप से नहीं जोड़ते < # #> टैग करते हैं।

सही सिंटैक्स

<#+ public void output() { #> 
blah blah blah etc. very complex example with embedded expression like  <#=message#> 

<#+ } 
#> 
6

होगा यह कोई वैकल्पिक समाधान नहीं वर्ग सुविधा ब्लॉक <#+ ... #> का उपयोग कर रहा है।

loooooooong text message 
:

<#@ template language="C#" #> 
<#@ output extension=".txt" #> 

<# Action output =() => { #> 
loooooooong text <#= "message" #> 
<# }; #> 

<# output(); #> 

इस टेम्पलेट नीचे उत्पादन का उत्पादन: सामान्य बयान ब्लॉक <# ... #> अंदर एक लैम्ब्डा अभिव्यक्ति का उपयोग करते हुए एक स्थानीय समारोह को परिभाषित करने की अनुमति देता है इस प्रकार है