I'm attempting to implement a calculator-like application in C#. But the way I've currently implemented it seems a little messy and inefficient. It works, but it's just I'm pretty sure it can be achieved in a more elegant solution.
I looked to see if I could factor out any repeating code, such as the switch statement - but without having numerous parameters in the method, I don't think it'll make things much better.
Here's the main portion of the code:
private double Calculate()
{
double answer = 0.0;
foreach (double number in this.numbers)
{
int index = this.numbers.IndexOf(number);
if (index != this.numbers.Count() - 1)
{
if (answer != 0.0)
{
switch ((int)operators[index])
{
case (int)Operator.Plus:
answer = (double)(answer + numbers[index + 1]);
break;
case (int)Operator.Minus:
answer = (double)answer - numbers[index + 1];
break;
case (int)Operator.Divide:
answer = (double)answer / numbers[index + 1];
break;
case (int)Operator.Multiply:
answer = (double)answer * numbers[index + 1];
break;
}
}
else
{
switch ((int)operators[index])
{
case (int)Operator.Plus:
answer += (double)(number + numbers[index + 1]);
break;
case (int)Operator.Minus:
answer += (double)number - numbers[index + 1];
break;
case (int)Operator.Divide:
answer += (double)number / numbers[index + 1];
break;
case (int)Operator.Multiply:
answer += (double)number * numbers[index + 1];
break;
}
}
}
}
return answer;
}
Just for reference, Operators is an ENUM that's defined as:
private enum Operator
{
Plus = 1,
Minus = 2,
Multiply = 3,
Divide = 4,
}
and the two lists:
private List<double> numbers;
private List<Operator> operators;
Any ideas on how I could improve this?