首页后端开发ASP.NETC#如何使用键值对取代Switch...Case语句的示例

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

时间2024-01-30 17:42:03发布访客分类ASP.NET浏览379
导读:收集整理的这篇文章主要介绍了C#如何使用键值对取代Switch...Case语句的示例,觉得挺不错的,现在分享给大家,也给大家做个参考。swich....case 条件分支多了之后,会严重的破坏程序的美观性。比如这个上述代码是用于两个进程之...
收集整理的这篇文章主要介绍了C#如何使用键值对取代Switch...Case语句的示例,觉得挺不错的,现在分享给大家,也给大家做个参考。swich....case 条件分支多了之后,会严重的破坏程序的美观性。
比如这个

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

声明键值对对象

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

DictionaryEnumMsg, Actionmessage>
    >
     mMessageReceiver = new DictionaryEnumMsg, ActionMessage>
    >
    ();
    

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

初始化时注册消息

在初始化时,将枚举与相应的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);
}
    

这样就把键值对对象构建完成。那么就可以将重构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);
        }
    

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

        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语句的示例的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

csharp

若转载请注明出处: C#如何使用键值对取代Switch...Case语句的示例
本文地址: https://pptw.com/jishu/592834.html
C#中关于Dictionary的用法详解 javascript怎么改变元素宽高

游客 回复需填写必要信息