本文摘自PHP中文网,作者黄舟,侵删。
swich....case 条件分支多了之后,会严重的破坏程序的美观性。
比如这个
上述代码是用于两个进程之间通信的代码,由于通信的枚举特别的多,所以case的分支特别的多。导致了代码的可读性,可维护性严重下降。经过查找资料和重构,想到了一种可行的在这种情况替代switch...case的方案――――――利用键值对。
声明键值对对象
针对进程通信的代码逻辑,构建了如下的键值对。
1 | Dictionary<EnumMsg, Action<Message>> mMessageReceiver = new Dictionary<EnumMsg, Action<Message>>();
|
这个键值对的键是自定义的消息枚举,值是Action<Message>
的委托。这样消息枚举和消息枚举对应的处理函数就一一对应了。
初始化时注册消息
在初始化时,将枚举与相应的Action进行装载。
1 2 3 4 5 6 7 8 | 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);
}
|
这样就把键值对对象构建完成。那么就可以将重构swith...case代码段了。
修改switch...case代码段
重构前的switch....case代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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);
}
|
基于键值对来查找对应的处理方法的代码
1 2 3 4 5 6 7 8 9 10 11 12 | 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);
}
}
}
|
根据键值对的键来进行查找,当需要增加新的case分支的时候,原本的方法需要更改switch....case分支,但是利用键值对的方法,只需要编写新的处理方法,并且在键值对中增加新的一对键值就可以了。代码简洁美观,没有一长串令人厌烦的case了。
以上就是C#如何使用键值对取代Switch...Case语句的示例的详细内容!
相关阅读 >>
c#中异步编程4async与await异步程序开发的实例分析
总结.net mvc实现长轮询实例
c#如何使用正则表达式来验证中文字符的案例
c#中关于多线程创建对象的示例分享
c#中关于dbnull的解释
入门级的.net mvc 实例
分享n种.net获取当前路径的的实例
c#中enum与string的相互转换的示例
.net中的序列化详解
c#如何使用libusbdotnet实现usb通信的示例详解
更多相关阅读请进入《Switch...Case》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#如何使用键值对取代Switch...Case语句的示例