我如何重写&&(逻辑和运算符)

本文关键字:逻辑和 运算符 何重写 重写 | 更新日期: 2023-09-27 18:04:02

其他似乎都遵循这个模式,但是当我尝试:

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

我得到"期望可重载二进制运算符"。我做错了什么?

我如何重写&&(逻辑和运算符)

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

根据文档:

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

本文提供了关于如何实现您自己的自定义&&||操作符的更多信息。

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

提供相同的功能。具体来说,从这里开始:

操作x && y被求值为T.false(x) ? x : T.&(x, y)
[…]
首先计算x,然后对结果调用运算符false来确定x是否绝对为假。然后,如果x确定为false,则操作的结果是先前为x计算的值。

这表明当正确实现上述过载时,短路评估也将按预期工作。重载|也可以用类似的方式完成。

查看可重载操作符的MSDN页面:

条件逻辑操作符不能重载,但使用&和|,可以重载。

&&||操作符。

所以,简而言之,重写&,您将获得&&与它一起免费。

From this:

&&, ||:条件逻辑操作符不能重载,但可以重载使用&和|,可以重载。

你不能重写它,但是你可以重写&或者|