gpt4 book ai didi

c# - 对于这种选择,有没有比 'iif' 或 '?:' 更好的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:48 26 4
gpt4 key购买 nike

我正处于我的自定义 View 引擎中的某个时刻,我希望事情变得更清晰一些。到目前为止,我拥有的最丑陋的部分之一是 iif 类型的功能。它最终看起来像这样:

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

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

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

我能想到的一种缩短它的方法是 ?? 运算符,但是当你有类似 Comments.Count==0

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

最佳答案

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") =}

等等

关于c# - 对于这种选择,有没有比 'iif' 或 '?:' 更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com