論理式を含むクラスを構築しています。
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));
}
}
}