其他答案几乎涵盖了这一点,但是“这是一个表达”并不能真正解释为什么它如此有用...
在C ++和C#等语言中,您可以使用它们定义本地只读字段(在方法主体内)。对于常规的if / then语句,这是不可能的,因为必须在该单个语句内分配只读字段的值:
readonly int speed = (shiftKeyDown) ? 10 : 1;
与以下内容不同:
readonly int speed;
if (shifKeyDown)
speed = 10; // error - can't assign to a readonly
else
speed = 1; // error
以类似的方式,您可以在其他代码中嵌入一个三级表达式。除了使源代码更紧凑(并在某些情况下更易读取)之外,它还可以使生成的机器代码更紧凑和高效:
MoveCar((shiftKeyDown) ? 10 : 1);
...生成的代码可能少于必须两次调用相同方法的代码:
if (shiftKeyDown)
MoveCar(10);
else
MoveCar(1);
当然,它也是一种更方便和简洁的形式(更少的键入,更少的重复,并且如果必须在if / else中重复代码块,则可以减少错误的机会)。在干净的“通用模式”情况下,如下所示:
object thing = (reference == null) ? null : reference.Thing;
...比起漫长的if / else等价物,读/解析/理解(一旦您习惯了)速度更快,因此它可以帮助您更快地“理解”代码。
当然,仅仅因为它是有用的,并不意味着它是最好的东西用在每一种情况下。我建议仅将短代码用于含义清晰(或更清晰)的短代码,?:
如果您在更复杂的代码中使用它,或者将三元运算符相互嵌套,则可能会使代码难以阅读。