【问题标题】:Conditional logical operator working with =使用 = 的条件逻辑运算符
【发布时间】:2016-11-20 21:09:56
【问题描述】:

我知道下面的代码会同时执行左右表达式:

bool myBool = true;
myBool &= Foo();

有没有什么方法可以用同样的方式(一种&&=)写出会产生的代码:

bool myBool = true;
myBool = myBool &&  Foo();

代替

myBool = myBool & Foo();

【问题讨论】:

  • 不行,不能这样用
  • 具体说明“以相同方式编写”的含义。判断你不是很清楚的答案。
  • myBool = myBool && Foo(); 有什么问题?
  • 没什么,我只是确定没有其他方法可以不写两次myBool

标签: c#


【解决方案1】:

C# 中没有运算符&&=。所以你不能这样做。

有关所有运营商的列表,请查看MSDN

【讨论】:

    【解决方案2】:

    如果你想执行Foo(),只需交换

      bool myBool = ...;
      myBool = Foo() && myBool;
    

    【讨论】:

    • 谢谢,但我不希望它被执行。当我使用myBool &= Foo()
    【解决方案3】:

    这会回答您的问题吗? (不是很清楚)

    bool myBool = true;
    myBool = myBool ||  (!myBool && Foo());
    

    只有myBoolfalse才会执行函数

    【讨论】:

      【解决方案4】:

      如前所述,没有&&=-operator,因此您不能重载任何运算符。有关可以为任何类型重载的运算符列表,请参阅here。对于赋值运算符,根本没有定义重载:

      赋值运算符不能重载,但 +=,例如,使用 + 计算,可以重载。

      因此,您当前使用 myBool && Foo(); 的方法是可行的方法。

      正如this post 中提到的,&=& 的 IL 是相等的,因此前者只是后者的语法糖。因此,创建这样一个运算符并没有真正的价值,因为它的所有用途都是删除几个字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多