Dictionnaire avec délégué ou d'un commutateur?
Je suis en train d'écrire un analyseur syntaxique qui appelle certaines fonctions dépendent de la valeur.
Je peux mettre en œuvre cette logique avec interrupteur simple comme ceci:
switch(some_val)
{
case 0:
func0();
break;
case 1:
func1();
break;
}
ou avec les délégués et un dictionnaire comme ceci:
delegate void some_delegate();
Dictionary<int, some_delegate> some_dictionary = new Dictionary<int, some_delegate>();
some_dictionary[0] = func0;
some_dictionary[1] = func1;
some_dictionary[some_value].Invoke();
Sont ces deux méthodes sont équivalentes et qui est préférée?
Vous devez vous connecter pour publier un commentaire.
En termes d'accès, elles sont identiques: les deux il suffit de vérifier si cette valeur spécifique correspond à un résultat. Cependant, un Dictionnaire jeter un hors-limites exception, si vous essayez d'accéder à une inexistant clé.
Le choix devrait être principalement le ré-utilisabilité. Si vous avez seulement besoin de faire cette ramification de la logique à un moment donné, puis à l'aide d'un switch-case est probablement fait plus de sens que de stocker une variable. Si vous avez besoin d'accéder à plusieurs reprises dans les points séparés, puis utiliser le Dictionnaire pour vous sauver de viens de re-coller le commutateur-déclaration à plusieurs reprises.
Je préfère largement le dictionnaire de choix, car avec un initialiseur, il peut être beaucoup plus compact et plus lisible:
Aussi, vous avez une flexibilité plus; vous pouvez ajouter des conditions et des actions par programmation, qui est souvent à portée de main, en fonction de ce que vous faites.
Si typique de programmeur sur votre équipe est tout comme ceux qui me traitent souvent, vous devriez aller pour l'option la plus simple c'est à dire le commutateur. Les délégués semblent à moi comme un "intelligent" solution qui n'est pas nécessaire.
J'aime le dictionnaire approche, car il vous donne la possibilité d'éventuellement échanger vos expressions lambda en tant que de besoin. C'est un bon truc pour un programmeur de garder dans leur sac à outils pour les cas impliquant des programmes à l'aide de complexes d'arbres de décision. Il serait très difficile de modifier votre commutateur cas des blocs au moment de l'exécution et la meilleure réponse serait la fin avec des lambdas de toute façon.
Une fois, j'ai eu une situation où j'avais besoin de créer une instruction switch de façon dynamique. Cette méthode a fourni beaucoup plus lisible solution.
À la fois faire de même (bien que vous devriez vérifier si la clé s'affiche dans la dictonary).
C'est juste une question de lisibilité. De quoi a l'air le meilleur pour vous et plus important, ce que les gens de la lecture de votre code préférez.
(Je pense que le dictionnaire)
Si vous avez besoin de passer sur des chaînes de caractères dans un fichier de ressources, par exemple pour la mondialisation, puis vous aurez besoin d'utiliser le dictionnaire/délégué approche.