【问题标题】: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
【解决方案2】:
您不能直接重载 &&,但可以重载 false、true 和 & 运算符 - 请参阅 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:
&&, || :条件逻辑运算符不能重载,但它们是
使用 & 和 | 求值,可以重载。
所以你不能覆盖它,但你可以覆盖 & 或 |。