C# comment utiliser enum avec interrupteur
Je ne peux pas comprendre comment utiliser les commutateurs en combinaison avec un enum. Pourriez-vous s'il vous plaît dites-moi ce que je fais mal, et comment le résoudre? J'ai utiliser un enum pour faire une calculatrice de base.
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;
}
}
}
Le résultat final devrait être quelque chose comme ceci:
Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, PLUS))
Output: The sum of 5 and 5 is 10
Pourriez-vous les gars s'il vous plaît dites-moi comment je suis gâcher?
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de convertir
Par le chemin, utilisez des crochets
La bonne réponse est déjà donné, néanmoins, ici, c'est le meilleur moyen (de passer):
using OperatorsDict = Dictionary<Operator, Func<int, int, double>>
et ensuite utiliserOperatorsDict
au lieun'ont tout simplement pas de cast en int
Depuis C# 8.0 a introduit un nouveau commutateur d'expression pour les énumérations, vous pouvez le faire encore plus élégant:
Réf. https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8
Vous ne devraient pas jeter un entier. Et pour la division, vous avez besoin de jeter gauche pour doubler tout d'abord, si non vous allez faire une division d'entier.
Dans le cas où vous ne voulez pas utiliser l'instruction return pour chaque cas, essayez ceci:
Toutes les autres réponses sont correctes, mais vous avez également besoin d'appeler votre méthode correctement:
Et puisque vous utilisez
int
pourleft
etright
, le résultat seraint
ainsi (3/2 will result in 1
). vous pourriez lancer àdouble
avant le calcul du résultat ou de modifier vos paramètres pour accepterdouble
Deux choses. Tout d'abord, vous devez qualifier l'enum de référence dans votre test - plutôt que de "PLUS", il faut "de l'Opérateur.PLUS". Deuxièmement, ce code serait beaucoup plus lisible si vous avez utilisé l'énumération des noms de membres plutôt que de leur intégrante des valeurs dans l'instruction switch. J'ai mis à jour votre code:
Appeler ce avec:
Votre code est bien. Dans le cas où vous ne savez pas comment l'utiliser Calculer la fonction, essayez de
Par défaut les valeurs de l'enum commencer à 0 et augmente d'un pour les éléments suivants, jusqu'à ce que vous attribuer des valeurs différentes. Vous pouvez aussi le faire :
Pas besoin de se convertir. Vous pouvez appliquer des conditions sur les Énumérations à l'intérieur d'un commutateur. Comme si,
Ensuite, appelez ça comme ceci: