我真的很喜欢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");
}
}
当然,这意味着我失去了代码的可读性。无论如何,我只是好奇其他开发人员对这种编写代码的方法的看法。谢谢。我同样赞赏消极和积极的评论。
答案 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)
它被称为三元运算符(毕竟我们不会将二进制代码 二级代码调用),之前已经被问过: