Exemple C# montrant comment utiliser des paires clé-valeur pour remplacer l'instruction Switch...Case

黄舟
Libérer: 2017-09-07 13:56:15
original
3424 Les gens l'ont consulté

swich....case S'il y a trop de branches conditionnelles, cela nuira sérieusement à la beauté du programme.
Par exemple, celui-ci
Exemple C# montrant comment utiliser des paires clé-valeur pour remplacer l'instruction Switch...Case

Le code ci-dessus est utilisé pour la communication entre deux processus. Puisqu'il existe de nombreuses énumérations pour la communication, il existe de nombreuses branches de cas. En conséquence, la lisibilité et la maintenabilité du code sont sérieusement réduites. Après avoir recherché des informations et reconstruit, j'ai trouvé une alternative réalisable pour changer de cas dans cette situation : en utilisant des paires clé-valeur.

Déclarer des objets de paire clé-valeur

Pour la logique de code de la communication de processus, les paires clé-valeur suivantes sont construites.

Dictionary<EnumMsg, Action<Message>> mMessageReceiver = new Dictionary<EnumMsg, Action<Message>>();
Copier après la connexion

La clé de cette paire clé-valeur est une énumération de messages personnalisée, et la valeur est le délégué de Action<Message>. De cette manière, l'énumération du message et les fonctions de traitement correspondant à l'énumération du message sont en correspondance biunivoque.

Enregistrer le message lors de l'initialisation

Lors de l'initialisation, charger l'énumération et l'Action correspondante.

private void SubscribeMessageReceiver()
{
    mMessageReceiver.Add(EnumMsg.SEND_PANO_PARAM, UpdatePano);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_VIEW, ExecutePanoViewCommand);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_LENGTH_MEASURE, ExecuteLengthMeasure);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_AREA_MEASURE, ExecuteAreaMeasure);
    mMessageReceiver.Add(EnumMsg.CMD_PANO_QUICK_PICK, ExecuteQickPickCommand);
}
Copier après la connexion

Ceci termine la construction de l'objet paire clé-valeur. Ensuite, vous pouvez refactoriser le segment de code swith...case.

Modifier le switch...segment de code de cas

Le switch....code de cas avant la reconstruction

  protected override void DefWndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case ((int)API.WM_COPYDATA):
                    {
                        switch ((int)m.WParam)
                        {
                            case ((int)Procedure.OpenSkyline):
                                   m = OpenSkylineView(m);
                                break;
                            case ((int)Procedure.Measureare):
                                 m = Measure(m);
                                break;
                            case ((int)Procedure.Measurelength):
                                 m = Measure(m);
                                break;
                        }
                    }
                    break;
                default:
                    break;
            }
            base.DefWndProc(ref m);
        }
Copier après la connexion

Trouver la méthode de traitement correspondante en fonction de la valeur-clé paires Le code

        protected override void DefWndProc(ref Message m)
        {
            base.DefWndProc(ref m);
            if (m.Msg == (int)API.WM_COPYDATA)
            {
                EnumPanoMsg pEnumPanoMsg = (EnumPanoMsg)m.WParam;
                if (mMessageReceiver.Keys.Contains(pEnumPanoMsg))
                {
                    mMessageReceiver[pEnumPanoMsg](m);
                }
            }
        }
Copier après la connexion

recherche en fonction de la clé de la paire clé-valeur Lorsqu'une nouvelle branche case doit être ajoutée, la méthode d'origine nécessite de changer la branche switch....case, mais en utilisant. la méthode de paire clé-valeur, il vous suffit d'écrire une nouvelle méthode de traitement et d'ajouter une nouvelle paire de valeurs-clés à la paire clé-valeur. Le code est concis et beau, sans une longue liste de cas ennuyeux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal