web-dev-qa-db-ja.com

VisualStudioプロジェクト/アイテムテンプレートパラメーターロジック

このトピックに関する投稿は数件しか見ていませんが、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ステートメントに中括弧を追加して、複数のロジックブロックが必要になる場合があります。

それほど悪くはありませんが、これにはいくつかのトリックがあります。 string matchの$ 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またはまたは記号をまだ見つけていません。論理的等価性を使用するだけでこれを回避できました。

および-> $ if $(式1)$ if $(式2)$ endif $ endif $

または-> $ if $(expression1)ステートメント$ else $ $ if $ステートメント$ endif $ $ endif $

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

28
maschall

ロジックの場合andおよびor
andは次のとおりです。
&&
while or is:
||

したがって、andを含むifステートメントは次のようになります。

if ((a != null)&&(a !=""))
{
    Console.Write(a);
}

また、orを含むifステートメントは次のようになります。

if ((b != null)||(b >= 5))
{
    Console.Write(b);
}

テンプレートの場合、*。csファイルをテンプレートとしてエクスポートできます。 [プロジェクト]> [テンプレートのエクスポート...]の下にあります。

(私はVisualStudios 2017を使用していました)

これがお役に立てば幸いです。

1
Harry S