【问题标题】:c# Assignment operator &=c# 赋值运算符 &=
【发布时间】:2011-07-29 02:01:33
【问题描述】:

如果我有以下布尔:

bool success = true;

以下三行代码是否会成功存储相同的结果:

1 - success &= SomeFunctionReturningABool();

2 - success = success & SomeFunctionReturningABool();

3 - success = success && SomeFunctionReturningABool();

我发现一篇文章指出 1 是 2 的快捷方式 - 但 2 与 3 相同,或者我的应用程序会在执行此行时爆炸...

【问题讨论】:

    标签: c# assignment-operator


    【解决方案1】:

    你是对的。 1 是 2 的捷径。 '&' 和 '&&' 的区别你可以在这里找到msdn

    '&' 是逻辑与,而 '&&' 是条件与

    【讨论】:

      【解决方案2】:

      1 和 2 同理,下面同理:

      int value += 1;
      int value = value + 1;
      

      3 不一样,好像success 为假,SomeFunctionReturningABool() 不会 被调用 - 这不是你想要的。

      【讨论】:

        【解决方案3】:

        对于布尔类型,单 & 计算所有操作数,而双 && 仅在必要时计算(即如果第一个操作数为假,则不会计算第二个操作数),也称为“短-电路”评估。

        来源:http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.80).aspx

        &= 赋值运算符与单个& 相同。

        【讨论】:

        • 非常感谢!那么这意味着如果成功为假,则第 3 行将不会执行该函数?
        【解决方案4】:

        选项 2 和 3 是等效的,&= 正是这样做的。

        您应该知道,如果第一次调用失败,则后续调用可能不会发生:例如,

        if (x != null && x.Test() == true)
        

        它首先评估x != null - 如果它是假的,那么第二部分将不会被执行。此处同样适用。

        (嗯,我想知道这是否只是 && 而不是 &...)

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 2016-04-01
        • 2013-03-30
        • 2011-12-12
        • 2011-05-20
        • 2011-04-15
        • 2016-08-30
        相关资源
        最近更新 更多