.NET开发人员对条件运算符的看法是什么?

时间:2009-04-07 14:18:24

标签: c# .net ternary-operator conditional-operator

我真的很喜欢C#中的条件运算符。它使我的生活更容易编写如下的逻辑:

public  string FormattedFileName
    {
        get
        {
            return string.Format("{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 
             ? "0" + DateTime.Now.Month.ToString()
             : DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 
             ? "0" + DateTime.Now.Day.ToString()
             : DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
        }
    }

当然,这意味着我失去了代码的可读性。无论如何,我只是好奇其他开发人员对这种编写代码的方法的看法。谢谢。我同样赞赏消极和积极的评论。

17 个答案:

答案 0 :(得分:63)

喜欢它吗?使用它:不要

// if (Like it) then (Use it) else (Don't)

答案 1 :(得分:20)

当您需要它时,三元运算符是非常宝贵的。但是,我认为通常有更好的方式来表达自己。在您给出的示例中,为什么不使用能够完全符合您要求的格式字符串:"{0:00}_{1:00}_{2}_{3}.xls",这样可以显着简化代码?

答案 2 :(得分:10)

如果你想让它更加可读,你可以随时将调用分解为getCurrent Month(),getCurrentYear,getCurrentDate调用....

答案 3 :(得分:10)

您拥有的示例是滥用conditional operator

可以用这种方式表达得更清楚:

public string FormattedFileName
{
    get {
       return DateTime.Now.ToString("MM_dd_yyyy") +
          "_DownLoaded_From_Clients.xls";
    }
}

我发现条件运算符非常有用并经常使用它。如果使用得当,它可以通过使代码更简洁来帮助简化代码。

一般情况下,我会避免在同一个语句中链接多个条件,它会很快导致非常混乱,从而导致代码无法维护。

我也找到了?非常有用,并且经常发现可以很容易被替换的三元组。

例如:

a == null? "empty" : a

可以替换为:

a ?? "empty"

答案 4 :(得分:9)

漫画书的家伙说。 “最糟糕的是使用三元运算符。”

答案 5 :(得分:5)

可读性可以通过使用缩进,空格来实现,并且正如Dave所说,评论。

答案 6 :(得分:5)

我个人的经验法则是,如果它显然是三元所做的,那就没关系。如果它被塞进一行只是因为编码器可以使用三元组,那么它应该是一个括号内的if语句。

答案 7 :(得分:3)

我只将它用于简单的if语句,最多两个。除此之外,我宁愿把它写出来,也不要让它看起来像你发布的那样。然后我再次尝试不要在第一个位置有两个以上的嵌套if语句,所以它永远不会真正出现。

答案 8 :(得分:3)

我全都是使用条件运算符,但你不需要它......

return string.Format("{0}_{1}_{2}_{3}.xls", 
    DateTime.Now.Month.ToString("00"), 
    DateTime.Now.Day.ToString("00"), 
    DateTime.Now.Year, 
    "DownLoaded_From_Clients");

答案 9 :(得分:3)

我真的不喜欢你如何使用它。当我可以轻松地将它放在一行而不是使用多行if语句时,我会使用它。

答案 10 :(得分:2)

我喜欢第三级运营商。当您不熟悉符号时,这只是一个问题。很难找到关于孤独运算符的文档,但如果在文档和书籍中使用更多,我相信它会更受欢迎。

答案 11 :(得分:2)

当看看'功能'世界,你无法有条件地'做'事情时,条件运算符是非常常见的。在某种程度上,我的印象是函数范式正在引起人们的兴趣,因为它取出了由“if(this)dothis else dothat”语句引起的时间控制流程。这样可以更轻松地定义你的意思,而不是告诉计算机该做什么。

可读性是一个问题,但是,在完全不支持这种语言的语言中。

可调试性是另一个:在例如C ++,你不能只在其中一个分支上设置断点。

答案 12 :(得分:2)

我根本不喜欢三元运算符 - 它不是很易读,当我做错误修正并找到类似的东西时,我会变得非常脾气暴躁。

答案 13 :(得分:1)

一些括号帮助可读性极大。

考虑添加它们以帮助澄清您的交替操作员正在做什么,你应该没事。 :)

答案 14 :(得分:1)

为什么不做更像这样的事情?

public  string FormattedFileName
{
    get
    {
        return string.Format(
            "{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 ?
                "0" + DateTime.Now.Month.ToString() :
                DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 ?
                "0" + DateTime.Now.Day.ToString() :
                DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
    }
}

注意我根本没有更改代码,只是格式化。如上所述,您不需要在这里使用条件运算符,但是稍微小心缩进可以极大地提高可读性。我喜欢条件运算符,但是如果你在没有缩进的密集块中一起运行所有代码,那么无论你使用什么运算符,它都是不可读的。

答案 15 :(得分:1)

如果您担心可读性,请评论您的代码,否则我认为没有理由不使用它。

答案 16 :(得分:0)

它被称为三元运算符(毕竟我们不会将二进制代码 二级代码调用),之前已经被问过:

Is this a reasonable use of the ternary operator?