如果我有:
logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse);
Run Code Online (Sandbox Code Playgroud)
如果我的论证是真的,我怎么做到这一点只会做那个陈述的真正的一半而不是假的.我试过这样做:
logicBeingTested.isItTrue ? (status = true) : ();
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我知道我可以通过做一个if语句来解决这个问题,但出于好奇心的缘故,可以给出一个对论证无所作为的答案吗?
编辑:我对OP的bool值"状态"有点误导,我在新编辑中澄清了我想要的内容
我说最好读也最好写:
status |= logicBeingTested.isItTrue;
Run Code Online (Sandbox Code Playgroud)
只是分配一个值(即使它是无用的)可能和条件指令一样快(这可能涉及CMOV并且它应该可能被忽略的这种小的优化)并且更具可读性(IMO?).
如果status是,Nullable<bool>那么简单地回到平原if(编辑:从评论看起来它不清楚,但它适用bool?,我只是if在这种情况下考虑更清楚.Jeroen还注意到,如果status是一个属性,它将涉及不同的行为,但我们都有琐碎的财产获取者,对吗?).
if (logicBeingTested.isItTrue)
status = true;
Run Code Online (Sandbox Code Playgroud)
请注意,status |= logicBeingTested.isItTrue是-对相反的是,它可以在第一眼被认为-相当于if块,如果logicBeingTested.isItTrue是false则status是不变的(不是false),那么如果它是null它仍然是null.if如果您正在使用,这是(IMO)使用的一个很好的理由bool?.
关于原始代码的注释:三元运算符?:通常用作函数,而不是因为其操作数评估的副作用.阅读该代码时可能会产生误导.
编辑问题的附录:如果您不只是为变量赋值但需要执行某个操作,那么没有什么比旧的更清楚:
if (logicBeingTested.isItTrue)
DoSomething();
Run Code Online (Sandbox Code Playgroud)
请注意,如果logicBeingTested可能,null那么您可以将其重写为:
if (logicBeingTested?.isItTrue ?? false)
DoSomething();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果logicBeingTested你表现得logicBeingTested.isItTrue是false,做相反的只是使用?? true.