13

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

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

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

4

4 回答 4

18

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

根据文档

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

本文提供了有关如何实现您自己的自定义&&||的更多信息 运营商。

于 2013-03-15T18:42:11.723 回答
12

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

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);
}
于 2013-03-15T18:42:22.663 回答
7

请参阅可以重载运算符的MSDN 页面:

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

那是指&&||运算符。

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

于 2013-03-15T18:43:26.233 回答
4

从此:_

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

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

于 2013-03-15T18:43:35.937 回答