Maison  >  Article  >  développement back-end  >  Exemple C# montrant comment utiliser des paires clé-valeur pour remplacer l'instruction Switch...Case

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

黄舟
黄舟original
2017-09-07 13:56:153340parcourir

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>>();

La clé de cette paire clé-valeur est une énumération de messages personnalisée, et la valeur est le délégué de Action58613a913f649e803df57c76e6a932e4. 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);
}

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);
        }

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);
                }
            }
        }

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!

Déclaration:
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