在为学校项目工作时,我遇到了使我的方法起作用的问题。
下面是我需要创建的:
if (operator1 == "+")
{
//run method "calculate"
}
else if (operator1 == "-")
{
//run method "calculate"
}
代替此:
if (operator1 == "+")
{
decimal result = operand1 + operand2;
txtResult.Text = result.ToString();
}
else if (operator1 == "-")
{
decimal result = operand1 - operand2;
txtResult.Text = result.ToString();
}
我应该具备以下条件:
private static Boolean Calculate(this string logic, int operand1, int operand2)
{
switch (logic)
{
case "-": return operand1 - operand2;
case "+": return operand1 + operand2;
case "/": return operand1 / operand2;
case "*": return operand1 * operand2;
default: throw new Exception("invalid logic");
}
}
这是我尝试过的概念,但是没有成功,有什么建议吗?
作为参考,这些是我的项目的要求:
编写一个名为Calculate的私有方法,该方法执行所请求的操作并返回一个十进制值。对于每个操作数,您将需要两个十进制变量,对于运算符,您将需要一个字符串变量(将对两个值执行)。
答案 0 :(得分:2)
您的输入和返回类型错误,请尝试以下操作:
private static decimal Calculate(this string logic, decimal operand1, decimal operand2)
{
switch (logic)
{
case "-": return operand1 - operand2;
case "+": return operand1 + operand2;
case "/": return operand1 / operand2;
case "*": return operand1 * operand2;
default: throw new Exception("invalid logic");
}
}
还请注意,您使用的extension method只能在静态类中使用。要将其更改为常规方法,请从方法签名中删除this
。
答案 1 :(得分:1)
不返回Boolean
返回类型。而是返回decimal
。
private static decimal Calculate(string logic, decimal operand1, decimal operand2)
{
switch (logic)
{
case "-":
return operand1 - operand2;
case "+":
return operand1 + operand2;
case "/":
return operand1 / operand2;
case "*":
return operand1 * operand2;
default:
throw new Exception("invalid logic");
}
}
这应该返回所需的输出,因为其return type
为decimal
答案 2 :(得分:0)
您已定义Calculate
返回Boolean
,并且正在返回类型int
的结果。您需要将返回类型更改为int
。但是,如果假设您要使用两个decimal
并返回一个decimal
,则应将返回类型和操作数类型更改为decimal
。
答案 3 :(得分:-2)
您已经得到了一些很好的答案,在这里我将通过一些错误处理来合并它们,这些错误处理也应包括在内。
private static decimal Calculate(string logic, decimal operand1, int operand2)
{
if (null == logic)
throw new ArgumentException("logic cannot be null");
switch (logic)
{
case "-":
return operand1 - operand2;
case "+":
return operand1 + operand2;
case "/":
return operand1 / operand2;
case "*":
return operand1 * operand2;
default:
throw new ArgumentException("logic contains an unknown operator");
}
}