如果我有:
logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse);
如果我的论证是真的,我该怎么做呢它只做那个陈述的真正的一半而不是假的。我试过这样做:
logicBeingTested.isItTrue ? (status = true) : ();
但这不起作用。我知道我可以通过做一个if声明来解决这个问题,但出于好奇,可以给出一个对论证无所作为的答案吗?
编辑:我的博尔价值'状态'从OP有点误导,我澄清了我想要的新编辑答案 0 :(得分:5)
我说最好读也最好写:
status |= logicBeingTested.isItTrue;
只需指定一个值(即使它无用)可能与条件指令一样快(可能涉及CMOV
和它应该被忽略的这种小的优化)和更具可读性(IMO?)。
如果status
为Nullable<bool>
,则只需返回普通if
(编辑:来自评论,似乎不清楚,但它适用于{{1}在这种情况下,我只是考虑bool?
更清楚。Jeroen还注意到,如果if
是一个属性,它将涉及不同的行为,但我们都有琐碎的属性获取者,对吗?)
status
请注意if (logicBeingTested.isItTrue)
status = true;
- 与初看起来的相反 - 相当于status |= logicBeingTested.isItTrue
阻止,如果if
是logicBeingTested.isItTrue
则{{1} }}保持不变(不是false
),如果它是status
,它仍然是false
。如果您正在使用null
,这是(IMO)使用null
的一个很好的理由。
关于原始代码的说明:ternary operator ?:通常用作函数,而不是因为其操作数评估的副作用。阅读该代码时可能会产生误导。
编辑问题的附录:如果您不只是为变量分配值,而是需要执行某个操作,那么没有比旧的更明确:
if
请注意,如果bool?
可能是if (logicBeingTested.isItTrue)
DoSomething();
,那么您可以将其重写为:
logicBeingTested
在这种情况下,如果null
表现为if (logicBeingTested?.isItTrue ?? false)
DoSomething();
logicBeingTested
,那么只需使用logicBeingTested.isItTrue
。
答案 1 :(得分:2)
也许使用conditional operator:
status = logicBeingTested.isItTrue ? true : status;
但我确实认为,正如其他人评论的那样,为了清晰起见会更好:
if (logicBeingTested.isItTrue)
{
status = true;
}