2

私はカスタムビューエンジンの中で、物事を少しすっきりさせたいと思っています。私がこれまでに持っている最も醜い部分の1つは、iifタイプ機能です。最終的には次のようになります。

{= CssClass==null ? "" : "class=\""+CssClass+"\"" =}

これはコンパイルされます(これはT4テンプレートなので、C#コードを生成するだけです)。

Write(CssClass==null ? "" : "class=\""+CssClass+"\"");

私が考えることができるこれを短縮する1つの方法は??演算子ですが、それはあなたが次のようなものを持っているときは役に立ちませんComments.Count==0

生成されたC#コードと、ビューでの構文の外観をほぼ完全に制御できるので、デザインでこれを行うためのより良い方法は何でしょうか。私はもっ​​と読みやすいものを目指していますが、かなり簡潔でもあります。では、見栄えを良くするために、ビューエンジンでどのような構文変更を許可する必要がありますか?

4

1 に答える 1

2

T4は拡張メソッドを利用できますか?

これは少し厄介ですが、上記のコードが少し読みやすくなります。null参照でも拡張メソッドが機能するという事実を利用できます。

public static class MyStringExtensions
{
    public static string ToClassAttribute(this string s)
    {
        return String.IsNullOrWhiteSpace(s) ? String.Empty : "class=\"" + s + "\"";
    }
}

これで、コードは次のようになります。

{= CssClass.ToClassAttribute() =}

これが具体的すぎて、このような文字列として多くのHTML属性を実行している場合は、もう少し一般的なバージョンを作成できます。

public static class MyStringExtensions
{
    public static string ToAttribute(this string s, string attribute)
    {
        return String.IsNullOrWhiteSpace(s) ? String.Empty : attribute + "=\"" + s + "\"";
    }
}

したがって、この種のことを行うことができます。

{= CssClass.ToAttribute("class") =}
{= CssStyle.ToAttribute("style") =}

于 2011-03-21T00:29:49.707 に答える