我如何覆盖&& (逻辑和运营商)?

时间:2013-03-15 18:39:52

标签: c# operator-overloading

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

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

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

4 个答案:

答案 0 :(得分:15)

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

根据documentation

  

条件逻辑运算符不能重载,但使用& | 进行评估,可以重载。

This article提供了有关如何实施自定义&& || 运营商的更多信息。

答案 1 :(得分:10)

您不能直接重载&&,但可以重载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);
}

答案 2 :(得分:6)

请参阅可以重载运算符的MSDN page

  

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

指的是&&||运营商。

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

答案 3 :(得分:3)

来自this

  

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

因此您无法覆盖,但您可以覆盖&|