为了账号安全,请及时绑定邮箱和手机立即绑定

使用条件?:(三元)运算符的好处

使用条件?:(三元)运算符的好处

C#
潇潇雨雨 2019-07-03 09:57:06
使用条件?:(三元)运算符的好处与标准的if-etc语句相比,?:操作符的优缺点是什么?显而易见的是:有条件的?:运算符在处理直接值比较和赋值时更短、更简洁似乎不像if/Else构造那样灵活。标准IF/Else可以应用于更多情况(例如函数调用)。往往是不必要的长根据语句的不同,每个语句的可读性似乎各不相同。在第一次接触到?:操作符之后,我花了一段时间来理解它是如何工作的。考虑到我与许多非程序员一起工作,您会建议在可能的情况下使用它吗?还是坚持使用if/Else?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我基本上建议,只有在结果语句非常短并且相对于if/etc等效时,简洁性显著增加而不牺牲可读性时,才建议使用它。

很好的例子:

int result = Check() ? 1 : 0;

坏例子:

int result = FirstCheck() ? 1 : SecondCheck() ? 1 : ThirdCheck() ? 1 : 0;


查看完整回答
反对 回复 2019-07-03
?
万千封印

TA贡献1891条经验 获得超3个赞

其他答案几乎涵盖了这一点,但“这是一个表达”并不能真正解释为什么这是如此有用的.

在C+和C#等语言中,可以使用它们定义本地只读字段(在方法体中)。这在常规if/list语句中是不可能的,因为必须在该语句中分配只读字段的值:

readonly int speed = (shiftKeyDown) ? 10 : 1;

与以下不同:

readonly int speed;  if (shifKeyDown)  
    speed = 10;    // error - can't assign to a readonlyelse  
    speed = 1;     // error

以类似的方式,您可以在其他代码中嵌入一个三级表达式。除了使源代码更紧凑(在某些情况下,它的可读性更强)之外,它还可以使生成的机器代码更加紧凑和高效:

MoveCar((shiftKeyDown) ? 10 : 1);

.可能生成的代码比必须调用同一方法两次更少:

if (shiftKeyDown)
    MoveCar(10);else
    MoveCar(1);

当然,它也是一种更方便、更简洁的形式(更少的输入、更少的重复,并且如果必须在if/etc中复制代码块,则可以减少出错的可能性)。在这种干净的“常见模式”情况下:

object thing = (reference == null) ? null : reference.Thing;

..阅读/解析/理解(一旦你习惯了)要比冗长的if/etc更快,所以它可以帮助你更快地“摸索”代码。

当然,仅仅是因为有用并不意味着这是最好的使用在每一种情况下。我建议只在含义明确(或更清楚)的短代码中使用?:-如果您在更复杂的代码中使用它,或者在彼此之间嵌套三元操作符,则会使代码很难读懂。


查看完整回答
反对 回复 2019-07-03
?
墨色风雨

TA贡献1853条经验 获得超6个赞

当我有很多重复的代码时,我通常会选择一个三元操作符,否则。

if (a > 0)
    answer = compute(a, b, c, d, e);else
    answer = compute(-a, b, c, d, e);

使用三元操作符,可以通过以下方法实现这一点。

answer = compute(a > 0 ? a : -a, b, c, d, e);


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 867 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信