web-dev-qa-db-ja.com

ブールを「反転」できますか?

画面がアクティブかどうかを確認するためのチェックがいくつかあります。コードは次のようになります。

if (GUI.Button(new Rect(Screen.width / 2 - 10, 50, 50, 30), "Rules")) //Creates a button
    {
        if (ruleScreenActive == true) //check if the screen is already active
            ruleScreenActive = false; //handle according to that
        else 
            ruleScreenActive = true;
    }

ボタンをクリックするたびにruleScreenActiveの値を反転する方法はありますか?

(これはUnity3DのC#です)

47
Simon Verbeke

Boolの値を無効にすることにより、if/elseステートメントを削除できます。

ruleScreenActive = !ruleScreenActive;
118
Ahmad Mageed

私は書く方が良いと思います:

ruleScreenActive ^= true;

そうすることで、変数名を2回書くことを避けられます...

31
Jack

これはインライン化されるため、読みやすさが向上し、実行時コストは変わりません。

public static bool Invert(this bool val) { return !val; }

与えるには:

ruleScreenActive.Invert();
11
Jack
ruleScreenActive = !ruleScreenActive;
10
MusiGenesis