C # 스위치와 함께 열거 형을 사용하는 방법
열거 형과 함께 스위치를 사용하는 방법을 알 수 없습니다. 내가 뭘 잘못하고 있고 어떻게 고칠 수 있는지 말해 주시겠습니까? 기본 계산기를 만들려면 열거 형을 사용해야합니다.
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;
}
}
}
최종 결과는 다음과 같아야합니다.
Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, PLUS))
Output: The sum of 5 and 5 is 10
내가 어떻게 엉망이되는지 말해 줄래?
변환 할 필요가 없습니다.
switch(op)
{
case Operator.PLUS:
{
// your code
// for plus operator
break;
}
case Operator.MULTIPLY:
{
// your code
// for MULTIPLY operator
break;
}
default: break;
}
그건 그렇고, 대괄호를 사용하십시오
정답은 이미 주어졌지만 여기에 스위치보다 더 좋은 방법이 있습니다.
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;
}
단순히 int로 캐스트하지 마십시오.
switch(operator)
{
case Operator.Plus:
//todo
정수로 캐스트해서는 안됩니다. 그리고 나눗셈의 경우 정수 나눗셈을 수행하지 않을 경우 먼저 왼쪽에서 두 배로 캐스팅해야합니다.
public enum Operator
{
PLUS, MINUS, MULTIPLY, DIVIDE
}
public double Calculate(int left, int right, Operator op)
{
double sum = 0.0;
switch(op)
{
case Operator.PLUS:
sum = left + right;
return sum;
case Operator.MINUS:
sum = left - right;
return sum;
case Operator.MULTIPLY:
sum = left * right;
return sum;
case Operator.DIVIDE:
sum = (double)left / right;
return sum;
default:
return sum;
}
return sum;
}
public enum Operator
{
PLUS, MINUS, MULTIPLY, DIVIDE
}
public class Calc
{
public void Calculate(int left, int right, Operator op)
{
switch (op)
{
case Operator.DIVIDE:
//Divide
break;
case Operator.MINUS:
//Minus
break;
case Operator.MULTIPLY:
//...
break;
case Operator.PLUS:
//;;
break;
default:
throw new InvalidOperationException("Couldn't process operation: " + op);
}
}
}
각 경우에 return 문을 사용하지 않으려면 다음을 시도하십시오.
Calculate(int left, int right, Operator op)
{
int result = 0;
switch(op)
{
case Operator.PLUS:
{
result = left + right;;
}
break;
....
}
return result;
}
다른 모든 답변은 정확하지만 메서드를 올바르게 호출해야합니다.
Calculate(5, 5, Operator.PLUS))
And since you use int
for left
and right
, the result will be int
as well (3/2 will result in 1
). you could cast to double
before calculating the result or modify your parameters to accept double
Two things. First, you need to qualify the enum reference in your test - rather than "PLUS", it should be "Operator.PLUS". Second, this code would be a lot more readable if you used the enum member names rather than their integral values in the switch statement. I've updated your code:
public enum Operator
{
PLUS, MINUS, MULTIPLY, DIVIDE
}
public static double Calculate(int left, int right, Operator op)
{
switch (op)
{
default:
case Operator.PLUS:
return left + right;
case Operator.MINUS:
return left - right;
case Operator.MULTIPLY:
return left * right;
case Operator.DIVIDE:
return left / right;
}
}
Call this with:
Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, Operator.PLUS));
Your code is fine. In case you're not sure how to use Calculate function, try
Calculate(5,5,(Operator)0); //this will add 5,5
Calculate(5,5,Operator.PLUS);// alternate
Default enum values start from 0 and increase by one for following elements, until you assign different values. Also you can do :
public enum Operator{PLUS=21,MINUS=345,MULTIPLY=98,DIVIDE=100};
No need to convert. You can apply conditions on Enums inside a switch. Like so,
public enum Operator
{
PLUS,
MINUS,
MULTIPLY,
DIVIDE
}
public double Calculate(int left, int right, Operator op)
{
switch (op)
{
case Operator.PLUS: return left + right;
case Operator.MINUS: return left - right;
case Operator.MULTIPLY: return left * right;
case Operator.DIVIDE: return left / right;
default: return 0.0;
}
}
Then, call it like this:
Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, Operator.PLUS));
참고URL : https://stackoverflow.com/questions/15136134/c-sharp-how-to-use-enum-with-switch
'Nice programing' 카테고리의 다른 글
jQuery는 postmessage 이벤트를 지원하지 않습니까? (0) | 2020.11.27 |
---|---|
양식에 저장되지 않은 변경 사항에 대한 경고 (0) | 2020.11.27 |
JTable, 사용자 열 드래그 비활성화 (0) | 2020.11.27 |
pkl 파일의 압축을 푸는 방법은 무엇입니까? (0) | 2020.11.27 |
자바 스크립트 세트 대 어레이 성능 (0) | 2020.11.27 |