如果声明什么都不做,如何弄清楚简洁

Cap*_*ack 2 c# if-statement

如果我有:

logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse);
Run Code Online (Sandbox Code Playgroud)

如果我的论证是真的,我怎么做到这一点只会做那个陈述的真正的一半而不是假的.我试过这样做:

logicBeingTested.isItTrue ? (status = true) : ();
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我知道我可以通过做一个if语句来解决这个问题,但出于好奇心的缘故,可以给出一个对论证无所作为的答案吗?

编辑:我对OP的bool值"状态"有点误导,我在新编辑中澄清了我想要的内容

Adr*_*tti 5

我说最好读也最好写:

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.isItTruefalsestatus是不变的(不是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.isItTruefalse,做相反的只是使用?? true.