Skip to content

Commit 289013f

Browse files
committed
Update ExpressionEvaluator.cs
Add unary operators so they can be added to
1 parent 6aac80b commit 289013f

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,12 @@ protected enum TryBlockEvaluatedState
226226
ExpressionOperator.UnaryMinus
227227
};
228228

229+
protected IDictionary<string, ExpressionOperator> unaryOperatorsDictionary = new Dictionary<string, ExpressionOperator>()
230+
{
231+
{ "+", ExpressionOperator.UnaryPlus },
232+
{ "-", ExpressionOperator.UnaryMinus }
233+
};
234+
229235
protected virtual IList<ExpressionOperator> LeftOperandOnlyOperatorsEvaluationDictionary => leftOperandOnlyOperatorsEvaluationDictionary;
230236
protected virtual IList<ExpressionOperator> RightOperandOnlyOperatorsEvaluationDictionary => rightOperandOnlyOperatorsEvaluationDictionary;
231237
protected virtual IList<IDictionary<ExpressionOperator, Func<dynamic, dynamic, object>>> OperatorsEvaluations => operatorsEvaluations;
@@ -2748,12 +2754,11 @@ protected virtual bool EvaluateOperators(string expression, Stack<object> stack,
27482754
{
27492755
string op = match.Value;
27502756

2751-
if (op.Equals("+") && (stack.Count == 0 || (stack.Peek() is ExpressionOperator previousOp && !LeftOperandOnlyOperatorsEvaluationDictionary.Contains(previousOp))))
2752-
stack.Push(ExpressionOperator.UnaryPlus);
2753-
else if (op.Equals("-") && (stack.Count == 0 || (stack.Peek() is ExpressionOperator previousOp2 && !LeftOperandOnlyOperatorsEvaluationDictionary.Contains(previousOp2))))
2754-
stack.Push(ExpressionOperator.UnaryMinus);
2757+
if (unaryOperatorsDictionary.ContainsKey(op) && (stack.Count == 0 || (stack.Peek() is ExpressionOperator previousOp && !LeftOperandOnlyOperatorsEvaluationDictionary.Contains(previousOp))))
2758+
stack.Push(unaryOperatorsDictionary[op]);
27552759
else
27562760
stack.Push(operatorsDictionary[op]);
2761+
27572762
i += op.Length - 1;
27582763
return true;
27592764
}

0 commit comments

Comments
 (0)