2

在我的自定义视图引擎中,我希望事情变得更干净一些。到目前为止,我拥有的最丑陋的部分之一是iif类型功能。它最终看起来像这样:

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

它编译(它是一个 T4 模板,所以它只生成 C# 代码)相当于

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

我能想到的一种缩短方法是??运算符,但是当你有类似的东西时,这并没有帮助Comments.Count==0

我几乎可以完全控制生成的 C# 代码以及视图中的语法,那么在我的设计中执行此操作的更好方法是什么?我的目标是更具可读性,但也相当简洁。那么我应该在我的视图引擎中允许哪些语法修改以使其看起来更好?

4

1 回答 1

2

T4 可以使用扩展方法吗?

这有点讨厌,但它会使上面的代码更具可读性。我们可以利用扩展方法甚至对空引用起作用的事实:

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 回答