TheAlgorithms/C-Sharp · error · InvalidOperationException

Insufficient operands

Error message

Insufficient operands

What it means

EvaluateOperator throws InvalidOperationException when an operator is applied but the operand stack holds fewer than two values. A postfix expression is only evaluable if each operator has two preceding operands.

Solutions

  1. Verify the expression is valid postfix (operands count = operators count + 1) before evaluation.
  2. Produce postfix via InfixToPostfixConversion instead of hand-writing it.
  3. Catch InvalidOperationException and report the malformed expression.

Example fix

// before
int r = evaluator.PostfixExpressionEvaluation("2 +");
// after
int r = evaluator.PostfixExpressionEvaluation("2 3 +");
Defensive patterns

Strategy: validation

Validate before calling

int operands = postfix.Count(char.IsLetterOrDigit); int operators = postfix.Count(c => "+-*/^".Contains(c)); if (operands != operators + 1) throw new ArgumentException("Not a valid postfix expression.");

Try / catch

try { int r = evaluator.PostfixExpressionEvaluation(postfix); } catch (InvalidOperationException) { /* insufficient operands */ }

Prevention

When it happens

Trigger: Evaluating "2 +" or "+" — an operator appears before enough operands were pushed.

Common situations: Malformed postfix generated by buggy converters; expressions truncated during transmission; non-postfix input passed to the evaluator.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of TheAlgorithms/C-Sharp@96e2905cab (2026-09-13). Data as JSON: /api/errors/a1a06533e0ef9d4b. Report an issue: GitHub.

Appendix: source

Thrown at Algorithms/Stack/InfixToPostfix.cs:156

        private static void EmptyRemainingStack(Stack<char> stack, StringBuilder postfix)
        {
            while (stack.Count > 0)
            {
                if (stack.Peek() is '(' or ')')
                {
                    throw new InvalidOperationException("Mismatched parentheses.");
                }

                postfix.Append(stack.Pop());
            }
        }

        private static void EvaluateOperator(Stack<int> stack, char op)
        {
            if (stack.Count < 2)
            {
                throw new InvalidOperationException("Insufficient operands");
            }

            int b = stack.Pop();
            int a = stack.Pop();

            if (op == '/' && b == 0)
            {
                throw new DivideByZeroException("Cannot divide by zero");
            }

            int result = op switch
            {
                '+' => a + b,
                '-' => a - b,
                '*' => a * b,
                '/' => a / b,
                '^' => (int)Math.Pow(a, b),
                _ => throw new InvalidOperationException($"Unknown operator {op}"),

View on GitHub (pinned to 96e2905cab)