这是在命令行上工作的计算器代码的一部分。它工作得很好,而且数学是正确的,但它有点多余:
switch(Operator)
{
case "+": result = num1 + num2;
printResult();
break;
case "-" : result = num1 - num2;
printResult();
break;
case "*":
result = num1 * num2;
printResult();
break;
case "/":
result = num1 / num2;
printResult();
break;
case "^":
result = Math.Pow(num1, num2);
printResult();
break;
case "root":
result = Math.Pow(num1, (1/num2));
Console.WriteLine("Root degree " + num2 + " of " + num1 + " is " + result);
break;
default:
Console.WriteLine("Invalid operator.");
break;
}//END SWITCH 有没有办法避免这样的冗余代码
result = num1 Operator num2;或
for char o = Operator
result = num1 Operator num2;即使只是为了+-/*操作?
发布于 2016-06-30 10:57:44
首先,通过将PrintResult()移动到开关下面来删除重复。您每次都这样称呼它(几乎,您将需要使它更加健壮,我想)。然后,更改方法以返回结果。此方法计算并打印。不应该,那会破坏SRP。
现在,您可以创建要调用的函数字典。
var operations = new Dictionary<string, Func<int, int, double>>()
{
{ "+", (a, b) => a + b },
{ "-", (a, b) => a - b },
//...
}
return operations[Operator](num1, num2);可能不会编译,我在打电话。异常处理留待操作。
当然,如果你真的毛茸茸的,您可以创建一个计算器解析器。和真的过火的解决方案。
https://softwareengineering.stackexchange.com/questions/323295
复制相似问题