有没有办法在C#中切换一个布尔变量?

Tob*_*ith 3 c# boolean

有没有办法在C#中切换布尔变量的状态?

我知道这是一个简单的解决方案:

bool locked = false;

if (locked == false)
{
    locked = true;
}
else
{
    locked = false;
}
Run Code Online (Sandbox Code Playgroud)

但是可以在一行中完成这样的事情:

bool locked = false

locked = locked.toggle();
Run Code Online (Sandbox Code Playgroud)

Ger*_*eld 14

你还可以这样做:

locked ^= true;
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案! (4认同)
  • @Elmue我不同意,因为1)它与“locked = !locked”相比是深奥的,2)乍一看很容易误认为“locked = true”。 (3认同)
  • 为什么/如何运作?解释或者链接? (2认同)
  • ^ 是异或。“真^真”为假,“假^真”为真。因此,通过执行“xyz ^ true”,您可以反转左侧的值。我的行是“locked=locked^true;”的简写 (2认同)

rcs*_*rcs 12

是.使用以下内容:

locked = !locked;
Run Code Online (Sandbox Code Playgroud)


cho*_*mba 5

您可以定义如下扩展方法:

public static class Helpers
{
    public static bool Toggle(this bool value)
    {
        return !value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样您就可以写出更有意义的内容,例如locked = locked.Toggle()

希望能帮助到你

  • 可以,但是仅仅因为您可以定义扩展方法并不意味着您应该。AC#程序员应该知道逻辑上的'!' 操作员可以。 (3认同)
  • 如果您不知道该语言的语法,则为“更有意义”。在我看来,这似乎是不必要的复杂性。 (2认同)