38

このトピックに関する投稿は数件しか見たことがなく、Visual Studio のテンプレートのパラメーターのロジックに関する詳細な説明がないため、ここに投稿することにしました。

MSDN の記事に従って、カスタム パラメーターをテンプレートに追加し、必要に応じてウィザードで変更することができます。

テンプレートの任意のファイル (テンプレート ファイル自体以外) で、パラメーターに基づいてロジックを追加できます。ロジックで使用するキーワードは 3 つだけです。$if$ ( %expression% )、$else$、および $endif$。テンプレートファイルに次のものが含まれているとします。

public string foo( string a )
{
    return string.Format( @"foo( {0} );", a );
}

そして、「a」が null か空かをチェックするかどうかのロジックを追加します。

public string foo( string a )
{
$if$ ( $shouldCheckForNullOrEmpty$ == true )
    if ( !string.IsNullOrEmpty( a ) )
$endif$

    return string.Format( @"foo( {0} );", a );
}

もちろん、if ステートメントに中括弧を追加して、複数の論理ブロックが必要になる場合があります。

それほど悪くはありませんが、これにはいくつかのトリックがあります。$if$文字列一致のチェック、つまり shouldCheckForNullOrEmpty は「true」に等しくなければなりません。また、$if$ ($shouldCheckForNullOrEmpty$ == "true") を書きたくなりましたが、うまくいきません。

単一の式を持つ単一の if ステートメントは非常に単純なので、もう少し複雑な例を次に示します。

public string foo( string a )
{
$if$ ( $parameterCheckMode$ == ifNullOrEmpty )
    if ( !string.IsNullOrEmpty( a ) )
$else$ $if$ ( $parameterCheckMode$ == throwIfNullOrEmpty )
    if ( string.IsNullOrEmpty( a ) )
        throw new ArgumentException();
$endif$ $endif$

    return string.Format( @"foo( {0} );", a );
}

お分かりかもしれませんが、これはパラメーター モードの switch ステートメントです。$elseif$ がないので、$else$ $if$ にする必要がありますが、最後に余分な $endif$ を追加する必要があります。

最後に、ロジックのand or orシンボルをまだ見つけていません。論理的等価性を使用するだけでこれを回避しました。

and -> $if$ (式1) $if$ (式2) $endif $endif$

または -> $if$ ( 式 1 ) 文 $else$ $if$ 文 $endif$ $endif$

うまくいけば、これは誰かを助けます。

4

2 に答える 2