0

論理式を含むクラスを構築しています。

public enum LogicalOperator { And, Or };

public class LogicalExpression
{
    public LogicalOperator Operator { get; private set; }
    public List<object> Expressions { get; private set; }
}

Equals()カスタムや導入を考えていGetHashCode()ます。論理式の式の順序が、そのような論理式の等価性を意味するかどうかはわかりません。


以下は、実際の論理表現評価の抜粋です。

 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));                        
            }
        }
}
4

0 に答える 0