switch...case...之替换方案一】的更多相关文章

很多时候,当switch中有N个分支,且分支数已达10+,每个分支都是一个不小的方法体,那我们是不是应该考虑换一种方式来实现这个分支. 而我目前所能想到的是会用到如下几种方法. 1.Action 2.Func 3.Attribute 4.反射 简单方案一: 使用Action,Action是一个特殊的委托类,没有返回值. 具体的代码如下: using System; using System.Collections.Generic; namespace MyLofter.QuickStart {…
用switch case处理一个很长的判断,例如56个民族01代表汉族,02代表藏族,03代表壮族...,当传入数字想获取民族名称时就得写56个case,当传入民族获取背后的数字时,又得再写56个case,如下所示: private string GetNationValue(string s) { string result = "5"; switch (s) { case "01": result = "汉族"; break; case &q…
目录 1.用委托字典代替switch...case; 2.利用反射替代switch...case: 3.比较两种方案 4.其他方案 4.说明 5.参考 在开发 asp.net 项目中,通常使用一般处理程序(ashx)处理前端发送过来的请求,因为一个handler会处理多个请求,故ajax请求中一般都会加一个action的参数,在handler里根据这个action做相应的处理或返回相应的数据,这里大多数人都会想到用switch...case做判断,一开始我也是用的switch,但渐渐地发现,每个…
目录 1.背景 2.案例 3.switch…case…方式实现 4.switch…case…带来的问题 5.使用策略模式重构switch…case…代码 6.总结 1.背景 之前在看<重构    改善既有代码的设计>一书,在看到Replace Type Code With  State/Strategy(用状态模式/策略模式替换类型码)一节时遇到一个困惑:怎么用策略模式替换switch case代码?所幸的时,两天前查资料的时候偶然看到 圣殿骑士 的博客,他写的<31天重构学习>系…
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数据类型, 还有BOO数据类型, 以及一些其它的数据类型, 如自定义的结构体数据类型 BOOL数据类型是一种表示非真即假的数据类型, 布尔类型的变量只有YES和NO两个值. YES表示表达式结构为真, 反之, NO表示表达式结果为假(在c语言中, 认为非0即为真), BOOL类型主要用与分支结构或循环…
我这里的业务场景是根据消息类型将离线消息存入mongoDB不同的collection中.其中就涉及到大量的分支判断,为了增强代码的可读性和可维护性,对之前的代码进行了重构. 先对比一下使用反射+策略模式前后的代码: 重构前: 重构后: 我们可以看到重构前的代码充斥着大量的分支判断,以后每增加一个新的消息类型就要增加一个新的具体实现类和增加一个新的分支判断,可拓展性是相当差的:而重构后的代码当需要增加一个新的消息类型时,只需要增加一个具体的实现类就可以实现,根本不需要考虑分支判断,这也是我们希望看…
软件重构是改善代码可读性.可扩展性.可维护性等目的的常见技术手段.圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一. C语言开发的项目中,switch/case代码块是一个很容易造成圈复杂度超标的语言特性,所以本文主要介绍下降低switch/case圈复杂度的重构方法(如下图).switch圈复杂度优化重构可分为两部分:程序块的重构和case的重构.程序块重构是对代码的局部优化,而case重构是对代码…
swich....case 条件分支多了之后,会严重的破坏程序的美观性. 比如这个 上述代码是用于两个进程之间通信的代码,由于通信的枚举特别的多,所以case的分支特别的多.导致了代码的可读性,可维护性严重下降.经过查找资料和重构,想到了一种可行的在这种情况替代switch...case的方案------利用键值对. 声明键值对对象 针对进程通信的代码逻辑,构建了如下的键值对. Dictionary<EnumMsg, Action<Message>> mMessageReceive…
在代码中,时常有就一类型码(Type Code)而展开的如 switch ... case 或 if ... else if ... else 的条件表达式.随着项目业务逻辑的增加及代码经年累月的修改,这些条件判断逻辑往往变得越来越冗长.特别是当同样的逻辑判断出现在多个地方的时候(结构示意如下),代码的可读性和维护难易程度将变得非常的糟糕.每次修改时,你必须找到所有有逻辑分支的地方,并修改它们. switch(type) { ": ... break; ": ... break; ca…
Java switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch case 语句格式: switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 default : //可选 //语句 } switch case 语句有如下规则: switch 语句中的变量类型可以是: byt…
Android Studio快捷键switch case 轻松转换为if else 今天碰到的问题,没有找到资料,后面找到了方法,这个记下来,转载请注明出处:http://www.cnblogs.com/LT5505/p/5462820.html 原始代码如下: 随后选中“switch”,ALt+Enter同时选中,弹出对话框,选择“Replace 'switch' with 'if'”, 选中之后,点击,即可将“switch”转换为了'if'样式,如果需要转回“switch”,同样的快捷键方式…
switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //...; break; } swtich()变量类型只能是int.short.char.byte和enum类型.当进行case判断时,JVM会自动从上到小扫描,寻找匹配的case,可能存在以下情况: 情况一:若未找到,则执行默认的case. int i = 5; switch(i){ case 0: Sy…
在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小时,看了各位大神的表述,找到一个比较清晰的文章. 原来,switch进行了跳转优化,java中对switch有两种处理方式,生成不同的jvm指令,一是tableswitch,一个是lookupswitch.对于case的分支比较密集的情况,如: public class Test { public…
分支语句: if        else if       else      :    switch          case --如何使用 if  else if  else: Console.WriteLine("请你出拳"); --输出[请你出拳]            int a = Convert.ToInt32(Console.ReadLine()); --定义一个变量a            Random i = new Random(); --随机数        …
众所周知,GE API将会在15年12月25日结束服务,对于众多采用该API的软件,需要一些替换方案. 例如google map或者cesiumjs http://cesiumjs.org/ 或者尝试 D3js http://d3js.org/ Kartograph http://kartograph.org/ 另外支持C#的3D Map还有 http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=2105231 微软自家的bing…
判断成绩所属等级的 两种方法 1...      switch...case方法: #include<stdio.h> int main(void) { ;i <= ;++i) //允许用户10次输入 { ; //学生成绩 ; //学生成绩除以10 printf("请输入学生成绩以判定其所属等级\n"); scanf("%d",&score); scoreChange=(); //学生成绩除以10,并对其取整,scoreChange为0到1…
根据传入条件的不同,选择语句会执行不同的语句.下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough case 3: fmt.Printf("3") case 4, 5, 6: fmt.Printf("4, 5, 6") default: fmt.Printf("…
工作中从buff里截取了一个字符串,然后和配置文件中的字符串名字对比 ,如果一样,处理,不一样,elseif 再判断,再处理! switch(){case : case :...... }先说语法,再说注意事项switch的判断变量类型只能是字符型或者整型,请注意,只有这两种才可以switch后面紧跟的那个小括号里面 就是 要判断的变量名称 然后switch要求它后面的大括号完整,不能不写case 后面加一个空格跟上条件 当然条件也只能是字符型或者整型,然后加上冒号,条件语句正式开始 ,末了,不…
while的写法 var i=0; while(i<5){ document.write("12378<br />");  i++;} while(true)----死循环的写法.{ } do{}while();不管你正确与否,都先去执行一次,然后去判断,若不满足,则不继续执行var a =1;do{ document.write("12346789");-------不管下面的条件是什么,都会先打印出来”123456789“}while(a<…
相信很多和我一样的小伙伴刚从Eclipse转到Android Studio的时候,一定被快捷键给搞得头晕了,像Eclipse中代码补齐的快捷键是Alt+/ ,但是在AS中却要自己设置,这还不是问题的关键,比如在Eclipse中,输入sw然后按住Alt+/的时候,switch/case代码块就自动补齐了,对于我等喜欢偷懒的人来说省去了很多麻烦,但是在AS中就算按住Ctrl+space快捷键也没法补齐代码块,是不是就不行了呢,下面我就献丑了,带大家一起来定制自己的switch/case代码块. 首先…
Switch case必须与break一起使用 Break 是跳转语句.与switch case连用的时候是跳出最近的{}. static void Main(string[]args ) { //switch case 多用于年月日的计算 int cs=1; switch(cs)//小括号内是一个数据类型的值 { //case 后加空格,之后写上跟上面小括号内对应类型可能出现的值 case 1://cs值为1,则进行着一步,显示case 1 Console.WriteLine("case 1&…
语句的类型包括:声明语句.表达式语句.选择语句.循环语句.跳转语句.异常语句 1.声明语句引:入新的变量或常量. 变量声明可以选择为变量赋值. 在常量声明中必须赋值. 例如: int i = 0;//声明变量i 并赋值,也可以不赋值. double d; “//”表示注释一行,“/*…*/”可以注释一段区域,注释后的内容变绿. 2.表达式语句:用于计算值的表达式语句必须在变量中存储该值. 例如: sum = i + j;//变量i和j在此之前必须先赋值.而且sum也需要声明类型. int x =…
1.while语句:当···的时候 格式:初始条件           while(循环条件)         {          循环体;          状态改变;         } 相当于for循环的另一种变形. 例如: static void Main(string[] args) { //循环四要素:初始条件,循环条件,状态改变,循环体 ; ;//初始条件 )//循环条件 { sum += i;//循环体 i++;//状态改变 } Console.Write(sum); } st…
------------------------------------------运算符---------------------------------------------------- *数学运算符:+  -  *  /  % 加 减 乘 除 取余 +可以用作字符串的拼接 <body> </body> <script> var a="hello"; var b="nihao"; var s=a+b; alert (s);…
java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相等,则条件成立,程序执行相应的分支,直到碰上break或有switch语句结束. 有几个需要着重注意的地方. 第一,前面说了switch(变量),只能是整型和字符类型. 第二,case之后是直接的常量数值. 第三,break使得程…
李洪强漫谈iOS开发[C语言-039]-switch case 补充:…
switch… case 语句的用法   public class Test7 { public static void main(String[] args) { int i=5; switch(i) { case 1: System.out.println("one"); case 10: System.out.println("ten"); case 5: System.out.println("five"); case 3: System…
今天学习了选择语句的 switch case是多选一的情况可以使用. 案例: //分别输入月份 几号 输出是今年的多少天 //每年的1,3,5,7,8,10,12月是31天 //今年的2月是28天 其他是30 , m2 = , m3 = , m4 = , m5 = , m6 = , m7 = , m8 = , m9 = , m10 = , m11 = ;----无需定义12月份的量,因为用不着 Console.Write("请输入月份:"); int m = int.Parse(Con…
1. switch case break(跳出) 距离break 最近的大括号,跳出这个大括号,执行大括号之后的命令 switch case 必须与 break 一同使用. 分别输入月份 几号 输出是今年的第多少天 每年的1 3 5 7 8 10 12月是31天 今年的2月是28天 其他的4 6 9 11是30天. int m =int.Parse(Console.ReadLine()); //定义输入的月份为m int d = int.Parse(Console.ReadLine()); //…
case 在编程中偶尔使用到switch case语句,对于case语句的处理,出现了两种错误,现总结如下: case后必须是常量.布尔类型.字符(不能是字符串): case后如果是‘||’或者‘&&’或者‘<’或者‘>’等逻辑运算,则实际是1或者0: case后不能出现变量,包括switch中包含的那个变量. #include <iostream> using namespace std; int main(int argc, char * argv[]) { i…