yes*_*man 64 c# enums switch-statement switch-expression
我无法弄清楚如何将开关与枚举结合使用.你能告诉我我做错了什么,以及如何解决它?我必须使用枚举来制作一个基本的计算器.
public enum Operator
{
PLUS, MINUS, MULTIPLY, DIVIDE
}
public double Calculate(int left, int right, Operator op)
{
int i = (int) op;
switch(i)
{
case 0:
{
return left + right;
}
case 1:
{
return left - right;
}
case 2:
{
return left * right;
}
case 3:
{
return left / right;
}
default:
{
return 0.0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最终结果应该是这样的:
Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, PLUS))
Output: The sum of 5 and 5 is 10
Run Code Online (Sandbox Code Playgroud)
你能告诉我我是怎么弄乱的吗?
J.S*_*rkl 101
你不需要转换它
switch(op)
{
case Operator.PLUS:
{
// your code
// for plus operator
break;
}
case Operator.MULTIPLY:
{
// your code
// for MULTIPLY operator
break;
}
default: break;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,使用括号
Prz*_*ski 24
由于 C# 8.0 为枚举引入了一个新的 switch 表达式,你可以做得更优雅:
public double Calculate(int left, int right, Operator op) =>
op switch
{
Operator.PLUS => left + right,
Operator.MINUS => left - right,
Operator.MULTIPLY => left * right,
Operator.DIVIDE => left / right,
_ => 0
}
Run Code Online (Sandbox Code Playgroud)
参考 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8
已经给出了正确的答案,不过这里有更好的方法(比开关):
private Dictionary<Operator, Func<int, int, double>> operators =
new Dictionary<Operator, Func<int, int, double>>
{
{ Operator.PLUS, ( a, b ) => a + b },
{ Operator.MINUS, ( a, b ) => a - b },
{ Operator.MULTIPLY, ( a, b ) => a * b },
{ Operator.DIVIDE ( a, b ) => (double)a / b },
};
public double Calculate( int left, int right, Operator op )
{
return operators.ContainsKey( op ) ? operators[ op ]( left, right ) : 0.0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
165004 次 |
| 最近记录: |