【问题标题】:How do I override && (logical and operator)?如何覆盖 && (逻辑和运算符)?
【发布时间】:2013-03-04 14:35:14
【问题描述】:

其他一切似乎都遵循这种模式,但是当我尝试时:

public static ColumnOperation operator&&(ColumnOperation lhs, ColumnOperation rhs)
{
    return new ColumnBooleanOperation(lhs, rhs, ExpressionType.And);
}

我得到“预期的可重载二进制运算符”。我做错了什么?

【问题讨论】:

标签: c# operator-overloading


【解决方案1】:

条件逻辑运算符不能重载。

根据documentation

条件逻辑运算符不能重载,但使用&|求值,可以重载。

This article 提供了有关如何实现您自己的自定义 &&|| 运算符的更多信息。

【讨论】:

    【解决方案2】:

    您不能直接重载 &&,但可以重载 falsetrue& 运算符 - 请参阅 operator &&

    public static bool operator true(ColumnOperation x)
    {
        ...
    }
    
    public static bool operator false(ColumnOperation x)
    {
        ...
    }
    
    public static ColumnOperation operator &(ColumnOperation lhs, ColumnOperation rhs)
    {
        return new ColumnBooleanOperation(lhs, rhs, ExpressionType.And);
    }
    

    【讨论】:

      【解决方案3】:

      查看MSDN page 可以重载运算符:

      条件逻辑运算符不能重载,但使用 & 和 | 求值,可以重载。

      指的是&&|| 运算符。

      因此,简而言之,覆盖&,您将免费获得&&

      【讨论】:

        【解决方案4】:

        来自this

        &&, || :条件逻辑运算符不能重载,但它们是 使用 & 和 | 求值,可以重载。

        所以你不能覆盖它,但你可以覆盖 &|

        【讨论】:

          猜你喜欢
          • 2014-01-05
          • 2011-04-12
          • 1970-01-01
          • 1970-01-01
          • 2017-03-24
          • 2020-12-20
          • 2014-05-10
          • 2014-01-01
          相关资源
          最近更新 更多