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

时间:2016-10-11 14:10:59

标签: c# if-statement

如果我有:

logicBeingTested.isItTrue ? (doSomeStuffIfItsTrue) : (doSomeNothingIfFalse);

如果我的论证是真的,我该怎么做呢它只做那个陈述的真正的一半而不是假的。我试过这样做:

logicBeingTested.isItTrue ? (status = true) : ();

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

编辑:我的博尔价值'状态'从OP有点误导,我澄清了我想要的新编辑

2 个答案:

答案 0 :(得分:5)

我说最好读也最好写:

status |= logicBeingTested.isItTrue;

只需指定一个值(即使它无用可能与条件指令一样快(可能涉及CMOV和它应该被忽略的这种小的优化)和更具可读性(IMO?)。

如果statusNullable<bool>,则只需返回普通if(编辑:来自评论,似乎不清楚,但它适用于{{1}在这种情况下,我只是考虑bool?更清楚。Jeroen还注意到,如果if是一个属性,它将涉及不同的行为,但我们都有琐碎的属性获取者,对吗?)

status

请注意if (logicBeingTested.isItTrue) status = true; - 与初看起来的相反 - 相当于status |= logicBeingTested.isItTrue阻止,如果iflogicBeingTested.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;
}