【问题标题】:Is there a syntatic sugar for ternary when you want only one outcome?当您只想要一个结果时,是否有三元的语法糖?
【发布时间】:2017-07-30 23:03:22
【问题描述】:

在 C# 中,很多时候我想根据表达式检索字符串。大多数时候我在视图中这样做。

因此,例如,如果我想根据布尔值 isComplete 打印“完成”,我需要这样做:

<span class="badge">@(isComplete? "Complete" : "")</span>

语言中是否有任何选项可以缩短这种语法,所以我不需要也有空字符串选项?

类似

<span class="badge">@(isComplete => "Complete")</span>

有一些方法可以自己执行此操作,例如接收字符串和布尔值的函数,如果布尔值为 false,则返回 null 或空,但它可能已经存在于语言中。

【问题讨论】:

  • 虽然我确实认为这个问题会因为“太宽泛”而被关闭,然后才有真正答案的人可以阐明这一点。
  • 对我来说毫无意义;不仅节省最少,而且在可读性方面也令人怀疑。为什么 "" 是自然分配而不是没有分配?当然,对于其他数据类型,其他默认值也适用。而对于对象,什么,null?

标签: c# ternary-operator syntactic-sugar


【解决方案1】:

你可以像这样简单地声明一个函数:

public String GetTextOrEmpty( bool control, String text )
{
    return control? text : "";
}

然后像这样调用它:

<span class="badge">@(GetTextOrEmpty( isComplete, "Complete" ))</span>

【讨论】:

  • 是的,就像我在问题中所说的那样,我坚持了下来。但是一个功能太明显了。有没有办法扩展一个操作符来做到这一点?
  • 我不这么认为。但是让我们看看其他人是否有任何想法。
  • 让我们充满希望。 C# 是一门充满语法糖的美丽语言,如果这样的东西还不存在,我真的会印象深刻。
  • @Phiter 目前没有。但是可以把上面的转换成扩展方法,直接在bool值上调用
【解决方案2】:

还没有,但这里有几个选择:

&lt;span class="badge"&gt;@isComplete.Complete()&lt;/span&gt; - 扩展方法

&lt;span class="badge"&gt;@Complete(isComplete)&lt;/span&gt; - 方法

&lt;span class="badge"&gt;@(Complete)isComplete&lt;/span&gt; - 带有explicit operator的自定义类型

&lt;span class="badge"&gt;@isComplete&lt;/span&gt; - 带有override ToString的自定义布尔类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多