public override bool BoolEvaluate(IExpressionContext context) { if (left.CanEvaluateToNumber(context) && right.CanEvaluateToNumber(context)) { float l, r; l = left.NumberEvaluate(context); r = right.NumberEvaluate(context); return(NumberCompare(l, r, op)); } else if (left.CanEvaluateToBool(context) && right.CanEvaluateToBool(context)) { bool l, r; l = left.BoolEvaluate(context); r = right.BoolEvaluate(context); return(BoolCompare(l, r, op)); } else { string l, r; l = left.StringEvaluate(context); r = right.StringEvaluate(context); return(StringCompare(l, r, op)); } }