如何使一个简洁的if语句出错
本文关键字:if 语句 出错 简洁 何使一 | 更新日期: 2023-09-27 18:12:27
如果我有:
logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse);
如果我的论证为真,它只执行语句的真一半而不执行假。我试着这样做:
logicBeingTested.isItTrue ? (status = true) : ();
但这不起作用。我知道我可以通过if语句来解决这个问题但是出于好奇有没有可能在不做任何事情的情况下给出一个答案?
编辑:我的bool值'状态'从OP有点误导,我澄清了我想在新的编辑
我想说最好的阅读也是最好的写作:
status |= logicBeingTested.isItTrue;
只是赋值(即使它是无用的) 可能与条件指令一样快(这可能涉及CMOV
,它是如此小的优化,应该被忽略)并且更具可读性(IMO?)。
如果status
是Nullable<bool>
,那么简单地回到一个普通的if
(编辑:从评论中似乎不清楚,但它与bool?
一起工作,我只是认为if
在这种情况下更清楚。Jeroen还指出,如果status
是一个属性,它将涉及不同的行为,但我们都有平凡的属性getter,对吗?
if (logicBeingTested.isItTrue)
status = true;
请注意,status |= logicBeingTested.isItTrue
与if
块相反,如果logicBeingTested.isItTrue
是false
,那么status
是不变的(不是false
),那么如果它是null
,它仍然是null
。如果你正在使用bool?
,这是(在我看来)一个使用if
的好理由。
关于原始代码的注释:三元操作符?:通常用作函数,而不是因为操作数求值的副作用。在阅读这些代码时,可能会产生相当大的误导。
编辑问题的附录:如果你不只是给一个变量赋值,而是需要执行一个操作,那么什么都没有比旧的if更清楚:
if (logicBeingTested.isItTrue)
DoSomething();
注意,如果logicBeingTested
可能是null
,那么您可以将其重写为:
if (logicBeingTested?.isItTrue ?? false)
DoSomething();
在这种情况下,如果logicBeingTested
的行为与logicBeingTested.isItTrue
是false
一样,则只需使用?? true
即可。
可能使用条件运算符:
status = logicBeingTested.isItTrue ? true : status;
但我确实认为,正如其他人评论的那样,这样做会更清晰:
if (logicBeingTested.isItTrue)
{
status = true;
}