gpt4 book ai didi

c# - 如何使简洁的 if 语句什么都不做

转载 作者:行者123 更新时间:2023-11-30 19:54:59 26 4
gpt4 key购买 nike

如果我有:

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

如果我的论点是正确的,我该如何做到这一点,它只执行该陈述的正确一半而不是错误的。我试过这样做:

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

但这行不通。我知道我可以通过做一个 if 语句来解决这个问题,但出于好奇,是否可以给出对争论什么都不做的答案?

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

最佳答案

我会说最好的阅读也是最好的写作:

status |= logicBeingTested.isItTrue;

只是分配一个值(即使它没用)可能和条件指令一样快(这可能涉及 CMOV 并且它是如此小的优化应该可能会被忽略)并且更具可读性(IMO?)。

如果statusNullable<bool>然后简单地回到一个普通的if (编辑:从评论来看似乎不清楚,但它与 bool? 一起使用,我只是认为 if 在这种情况下更清楚。Jeroen 还指出,如果 status 是一个属性,它将涉及不同的行为但我们都有一些微不足道的属性 setter/getter ,对吧?)。

if (logicBeingTested.isItTrue)
status = true;

请注意 status |= logicBeingTested.isItTrue是 - 与乍一看可能认为的相反 - 相当于 if block ,如果 logicBeingTested.isItTruefalse然后status不变(不是 false )那么如果它是 null还是null .这是(IMO)使用 if 的一个很好的理由如果你正在使用 bool? .

关于原始代码的注释:ternary operator ?:通常用作函数,而不是因为其操作数评估的副作用。阅读该代码时可能会产生误导。


已编辑问题的附录:如果您不仅要为变量赋值,而且需要执行操作,那么没有什么比旧的 if 更清楚:

if (logicBeingTested.isItTrue)
DoSomething();

请注意,如果 logicBeingTested可能是 null那么你可以将其重写为:

if (logicBeingTested?.isItTrue ?? false)
DoSomething();

在这种情况下如果logicBeingTested你表现得像logicBeingTested.isItTruefalse , 做相反的事情只需使用 ?? true .

关于c# - 如何使简洁的 if 语句什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com