swich....case S'il y a trop de branches conditionnelles, cela nuira sérieusement à la beauté du programme.
Par exemple, celui-ci
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.
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 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.
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.
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!