我正处于我的自定义视图引擎中,我希望事情变得更加清晰。到目前为止,我所拥有的最丑陋的部分之一是iif
类型功能。最终看起来像这样:
{= CssClass==null ? "" : "class=\""+CssClass+"\"" =}
编译(它是一个T4模板,所以它只生成C#代码)相当于
Write(CssClass==null ? "" : "class=\""+CssClass+"\"");
我可以想到的一种缩短此问题的方法是??
运算符,但是当你有类似Comments.Count==0
我主要完全控制生成的C#代码以及视图中的语法,那么在我的设计中这样做的更好的方法是什么?我的目标是更具可读性,但也相当简洁。那么我应该在视图引擎中允许哪些语法修改使其看起来更好?
答案 0 :(得分: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") =}
等