C# 逻辑运算符中参数的顺序是否影响相等?
我正在构造一个包含逻辑表达式的类:C# 逻辑运算符中参数的顺序是否影响相等?,c#,.net,logical-operators,boolean-logic,C#,.net,Logical Operators,Boolean Logic,我正在构造一个包含逻辑表达式的类: public enum LogicalOperator { And, Or }; public class LogicalExpression { public LogicalOperator Operator { get; private set; } public List<object> Expressions { get; private set; } } 在这两种类型的逻辑表达式中?您是否考虑过创建两个属性Left和R
public enum LogicalOperator { And, Or };
public class LogicalExpression
{
public LogicalOperator Operator { get; private set; }
public List<object> Expressions { get; private set; }
}
在这两种类型的逻辑表达式中?您是否考虑过创建两个属性
Left
和Right
,而不是操作数列表?@IlyaIvanov已经完成了。但有时,在逻辑表达式中使用左、右两个片段生成一堆内部表达式是非常烦人的;它使用与基础数学相似的规则。等于乘法。就OOp而言,Or相当于加法。哦,括号非常重要。你的逻辑系统包括副作用还是例外?例如,在C语言中,您总是希望在x!=空和x.Foo!=空
;如果你从右到左评估,那么右边可能会抛出。
private bool _evaluateExpression(object expr)
{
// ....
if (expr is LogicalExpression)
{
LogicalExpression logExpr = (LogicalExpression)expr;
switch (logExpr.Operator)
{
case LogicalOperator.And:
return !logExpr.Expressions.Exists(e => !this._evaluateExpression(e));
case LogicalOperator.Or:
return logExpr.Expressions.Exists(e => this._evaluateExpression(e));
}
}
}