2017-06-14 15 views
0

私は、実行時テキストテンプレートランタイムテキストテンプレート - 奇妙なエラーが

<#= Power(); #> 

これはテンプレートがで定義された同じクラスで定義された関数を呼び出す必要がありますこのコードを持っています。

public partial class GallerySpecsTemplate 
{ 
    // private fields, constructor removed 

    private string Power() 
    { 
     string line; 
     // line gets calculated 
     return line; 
    } 
} 

テンプレートの他の部分がそのクラスのプライベート変数を使用しているため、正しいクラスであることを100%確信しています。

なぜ4つのコンパイルエラーが発生しているのですか?

Error 1 ) expected      
Error 2 Invalid expression term ')'  
Error 3 ; expected      
Error 4 Invalid expression term ')' 

この行を削除すると、4つのエラーはすべて消えます。

メソッドPowerを部分クラス定義からクラスフィーチャコントロールブロックとしてテンプレートの最後に削除すると、同じエラーが発生します。

+0

違いはありません、同じエラー –

答えて

2

<#= expr #>の構文ではstatementではなくexpressionが必要ですが、これはoutput.Write(expr);にコンパイルされているためです。

... <#= SomeFunction(); #>を入力すると、明らかな構文エラーであるoutput.Write(SomeFunction(););にコンパイルされます。

;を削除するだけで問題なく動作します。簡単に言えば、セミコロンはC#expressionをC#statementに変換するものです。

<%= expr %>は、文ではなく式である(これはResponse.Write(expr);にコンパイルされています)を受け入れるASPX構文でも同じです。

+0

クール!非常に簡潔な答え! –

+0

ありがとう、これは問題を修正しました。私はこれとどこに行くべきか分からず、私が得た4つのエラーはひどく誤解を招く。 –