簡體   English   中英

如果聲明什么都不做,如何弄清楚簡潔

[英]How to make false of a concise if statement do nothing

如果我有:

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

如果我的論證是真的,我怎么做到這一點只會做那個陳述的真正的一半而不是假的。 我試過這樣做:

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

但這不起作用。 我知道我可以通過做一個if語句來解決這個問題,但出於好奇心的緣故,可以給出一個對論證無所作為的答案嗎?

編輯:我對OP的bool值“狀態”有點誤導,我在新編輯中澄清了我想要的內容

我說最好讀也最好寫:

status |= logicBeingTested.isItTrue;

只分配一個值(即使它沒用可能和條件指令一樣快(這可能涉及CMOV ,它可能是可能被忽略的那種小優化)並且更具可讀性(IMO?)。

如果statusNullable<bool>那么只需返回一個普通的if (編輯:從評論看起來它不清楚但它適用於bool?我只考慮在這種情況下if更清楚.Jeroen還注意到如果status是一個屬性,它將涉及不同的行為,但我們都有瑣碎的財產吸氣者,對嗎?)。

if (logicBeingTested.isItTrue)
    status = true;

請注意, status |= logicBeingTested.isItTrue與 - 初看起來相反 - 相當於if block,如果logicBeingTested.isItTruefalsestatus不變(不是false ),那么如果它為null則仍然為null 這是(IMO)使用if一個很好的理由,如果你正在使用bool?

關於原始代碼的注釋: 三元運算符?:通常用作函數,而不是因為其操作數評估的副作用 閱讀該代碼時可能會產生誤導。


編輯問題的附錄:如果您不只是為變量賦值但需要執行某個操作,那么沒有什么比舊的更清楚:

if (logicBeingTested.isItTrue)
    DoSomething();

請注意,如果logicBeingTested可能為null那么您可以將其重寫為:

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

在這種情況下,如果logicBeingTested你表現為logicBeingTested.isItTruefalse ,做相反的只是使用?? true ?? true

也許這使用條件運算符

status = logicBeingTested.isItTrue ? true : status;

但我認為,正如其他人評論的那樣,如果清晰度會更好:

if (logicBeingTested.isItTrue)
{
    status = true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM