Définition d'une variable au résultat d'un commutateur
Suis-je fou ou est-il un moyen, en C#, pour définir une variable à un commutateur du résultat? Quelque chose comme:
var a = switch(b)
{
case c:
d;
case e:
f;
default:
g;
};
Est-il possible dans une autre langue? J'ai juste pensé que c'était, mais je ne suis pas d'obtenir quoi que ce soit à la compilation. Merci à l'avance.
source d'informationauteur vbullinger
Vous devez vous connecter pour publier un commentaire.
Non,
switch
est une déclaration plutôt que d'une expression qui peut être évaluée.Bien sûr, vous pouvez l'extraire dans un autre méthode:
Sinon, vous pouvez utiliser un
Dictionary
si c'est juste une affaire de simple, constante mappages. Si vous pouvez nous donner plus d'informations à propos de ce que vous essayez d'atteindre, nous pouvons probablement vous aider à travailler sur les plus idiomatiques façon d'y arriver.Non, vous ne pouvez pas utiliser l'instruction switch comme une expression. Une autre façon de l'écrire est imbriquée des opérateurs conditionnels:
Ce n'est pas possible en C#.
Le plus proche est de la déplacer dans une méthode, ou ne l'affectation dans chaque cas individuel, c'est à dire:
Oui. Par exemple, la plupart des langages fonctionnels de support de quelque chose de similaire. Par exemple, F#'s le pattern matching (beaucoup plus puissant) version de ce.
Si vous n'étiez pas particulièrement préoccupé par l'efficacité, il serait assez facile de faire cuire un peu de classe à l'aide de médicaments génériques qui vous a permis d'utiliser un "fluent" de la chaîne d'appels de méthode comme ceci:
ou, si vous préférez, le plus compact
Si cela vous intéresse, je serais heureux de faire cuire un exemple
switch
en C# est un énoncé qui n'est pas un "retour" de la valeur. Si vous êtes intéressé à avoir un "switch" de l'expression, vous pouvez trouver le petit couramment classe que j'ai écrit ici afin d'avoir un code comme ceci:Vous pouvez aller plus loin et d'en généraliser ce, d'autant plus avec les paramètres de la fonction de la
Then
méthodes.Pas.
Un
switch
déclaration fournit une ramification de contrôle. Ce n'est pas une fonction qui évalue à quelque chose qui pourrait être affectée à une variable.Je voulais la même chose parce que j'utilise Ruby beaucoup, et qui permet de faire ce genre de chose. J'ai donc créé un package nuget appelé FluentSwitch.