关于C# switch维护性的问题

问题描述

类似下面的代码switch(action){case"A":{FunctionA(caseCollections,outmsg);break;}case"B":{FunctionB(caseCollections.data,outmsg);break;}……default:{break;}}根据需要case分支越来越多,请假各位大神有没有什么方式能代替switch呢

解决方案

本帖最后由 superlj06 于 2014-07-31 11:26:21 编辑
解决方案二:
枚举+动态执行
解决方案三:
反射,通过函数名去找函数,然后调用.
解决方案四:
引用1楼diaodiaop的回复:

枚举+动态执行

1楼能说的具体点么刚接触C#不久,谢谢
解决方案五:
stringfun="FunctionA";varparameters=newobject[]{DateTime.Now,""};GetType().GetMethod(fun).Invoke(this,parameters);stringmsg=(string)parameters[1];

推荐反射
解决方案六:
多了就应该上配置文件啊
解决方案七:
用委托。直接将方法作为参数传进来,不需要传“action”
解决方案八:
我觉得这个时候就是设计模式的使用了,你可以使用工厂方法模式,或者命令模式,将case的内容分离出来就可以了。
解决方案九:
用IF替换就是最简单的
解决方案十:
dic<string,委托>varfun=dic.First(x=>x.Key=="").Value;fun(caseCollections,outmsg)
解决方案十一:
三元运算符true?funA:funB
解决方案十二:
委托可以,用Dictionary来Key就是你原先的case,value就是具体的方法
解决方案十三:
引用7楼dongdongdongJL的回复:

我觉得这个时候就是设计模式的使用了,你可以使用工厂方法模式,或者命令模式,将case的内容分离出来就可以了。

工厂模式不行吧。工厂模式内部也是使用switch进行实例化对象的,只是把由客户选择转移到由工厂选择而已。改进的抽象工厂模式也并没有解决这个问题。真正要解决这个问题,应该是反射和委托。
解决方案十四:
定义一个委托把你的判定依据写成条件代码再用起来就简单了

时间: 2024-08-30 08:05:28

关于C# switch维护性的问题的相关文章

091116 T 维护性

在写的代码的时候,不应该想当然的认为代码是可维护性强的,语义明了的.不如这样想:不做这个程序两年后,回过头来看看自己写过的这些程序,是否还能修改自如?(其实这也是考虑一下别人来接手这个程序,是否能清楚的看明白是一个道理.)

C#中switch太长了怎么优化?可以使用反射或委托

在代码进行优化的时候,发现了switch case太长,有的竟然长达30个远远超过一屏这样在代码的可读性来说很差.特别在我们看代码的时候要拉下拉框我个人觉得这是不合理的.但是我不建议有 switch就进行反射或委托来解决.看实际的情况比喻10个以为还是可以接受的.因为switch看起来更加的直接而且效率相对来说是最好的.那下面就用代码来一点点进行解释 1:传统的用法 1.1:现在我们有一个需求通过传递参数来获取相关的信息.首先我们先看方法 public class SwitchMethod { 

提高项目的可维性:目录组织结构清晰和目录的深度不要多

    不使用单一入口的框架开发,代码和目录的数量越来越臃肿,项目维护成本很高   没有反面例子来做借鉴,人的大脑不以为然.下面的截图就是一个中型项目后来变成的目录结构,项目的代码越来越乱,开发人员不愿意去维护这个系统的代码,因为去找代码进行修改,变得很痛苦,代码混乱,目录很众多,找代码会看花眼. 是一套典型是基于discuz的ucenter的系统,随着公司业务量越来越大,随着时间的推移,对系统增加的功能越来越多,后来开发人员越来越多.这样一套系统,维护起来很困难.       具体到里面代码,

[游戏开发]工厂模式

游戏编程是我业余的爱好,也可以提高对编程的兴趣,每当我有时间的时候就会编写游戏,基于图片的问题所以首选小游戏.这是我毕业后第二款小游戏,相比上一款充分的运用了面向对象的技术,让我享受与不断做类的完善,特别提出的是使用递归技术使得算法更加简洁确实是个很不错的技术,比如:游戏中的地图整行消除判断以及消除. 目前的设计情况如下: (有写没必要的函数省略了,初次使用UML图) 此贴主要是想探讨类的设计,标题上写了工厂模式,这里只是简单的把UI创建放到另外一个地方罢了,严格来说应该不算是什么工厂,但是主要

Backbone.js的一些使用技巧

  这篇文章主要介绍了Backbone.js的一些使用技巧,Backbone.js是一款人气JavaScript库,需要的朋友可以参考下 自从3年前Backbone.js发布第一版以来,Backbone.js就成为一个流行的开源JavaScript "MV*"框架,并获得人们的青睐.尽管Backbone.js给JavaScript应用提供了框架,但是它仍然给开发者留有很多设计模式供选择,不管怎样,当开发者第一次使用Backbone.js时还会产生很多普遍的问题的. 因此,在这篇文章中,

创业一年来经历的技术风雨

虽然说是技术风雨,其实不过是一种文艺范儿的描述而已,没有这么夸张,只是在创业的这一年中,整个产品研发过程给了我许多前所未有的体验和启示,所以想借助这个机会大家一起交流,分享自己的一些收获. 这次分享打算从三个方面开始讲解,分别是: 1产品的架构以及技术选型 2技术团队的管理 3研发团队总结的技术实践 1产品的架构以及技术选型 产品的架构 首先来说说产品的架构.首先声明这不是广告,我们公司产品的商业版本也还未完全成型,所以本次交流仅仅是技术上的. 整体架构 产品代号为Mort,是基于大数据平台的商

MacOS 的安全和隐私指南

本文讲的是MacOS 的安全和隐私指南, 这里汇集了一些想法,它们是有关如何保护运行了 macOS 10.12 "Sierra" 操作系统(以前是 OS X)的现代化苹果 Mac 电脑,也包含了一些提高个人网络隐私的小贴士. 这份指南的目标读者是那些希望采用企业级安全标准的"高级用户",但是也适用于那些想在 Mac 上提高个人隐私和安全性的初级用户们. 一个系统的安全与否完全取决于管理员的能力.没有一个单独的技术.软件,或者任何一个科技能保证计算机完全安全:现代的计

MySQL系列教程(五)

MyCAT MyCat是基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远.业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品. MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师.架构师.DBA等,优秀的技术团队保证了MYCAT的产品质量.MYCAT并不依托于任

JavaWeb学习----JSTL标签库

一.JSTL简介: JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2.JSTL是由JCP(Java Community Process)所指定的标准规格,它主要提供给Java Web开发人员一个标准通用的标签函数库. Web 程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性.维护性和方便性. 既然是库文件,那我们就要