C#如何使用键值对取代Switch...Case语句的示例

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

swich....case 条件分支多了之后,会严重的破坏程序的美观性。
比如这个
C#如何使用键值对取代Switch...Case语句的示例

上述代码是用于两个进程之间通信的代码,由于通信的枚举特别的多,所以case的分支特别的多。导致了代码的可读性,可维护性严重下降。经过查找资料和重构,想到了一种可行的在这种情况替代switch...case的方案——————利用键值对。

声明键值对对象

针对进程通信的代码逻辑,构建了如下的键值对。

Dictionary> mMessageReceiver = new Dictionary>();
Copier après la connexion

这个键值对的键是自定义的消息枚举,值是Action的委托。这样消息枚举和消息枚举对应的处理函数就一一对应了。

初始化时注册消息

在初始化时,将枚举与相应的Action进行装载。

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

这样就把键值对对象构建完成。那么就可以将重构swith...case代码段了。

修改switch...case代码段

重构前的switch....case代码

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

基于键值对来查找对应的处理方法的代码

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

根据键值对的键来进行查找,当需要增加新的case分支的时候,原本的方法需要更改switch....case分支,但是利用键值对的方法,只需要编写新的处理方法,并且在键值对中增加新的一对键值就可以了。代码简洁美观,没有一长串令人厌烦的case了。

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!