Switch重构处理

public class Fun{

        public void IFNumberid(int flag)  

        {

                switch (flag)
                        {
                            case 1:
                                Console.WriteLine("优秀");
                                break;
                            case 2:
                                 Console.WriteLine("良好");
                                  break;
                            case 3:
                                  Console.WriteLine("一般");
                                  break;
                            case 4:
                                  Console.WriteLine("不及格");
                                  break;

                default:

                                  Console.WriteLine("");
                                  break;
                      }
  

        }  

以上Case里面是一个有序的数字,处理方法见 switch中case如果是有序的话,如何处理

那么假如我们换成了以下的事例呢?

public class Fun{

        public void NameResult(String flag)  

        {

                switch (flag)
                        {
                            case "a":
                                Console.WriteLine("优秀");
                                break;
                            case "张三":
                                 Console.WriteLine("良好");
                                  break;
                            case "c":
                                  Console.WriteLine("一般");
                                  break;
                            case "g":
                                  Console.WriteLine("不及格");
                                  break;

                default:

                                  Console.WriteLine("");
                                  break;
                      }
  

        }  

这里的Case并不是一个有序的,那么我们利用数组索引的办法将并不可行,此时,则可以考虑使用Dictionary<Tkey, Tvalue>来实现Switch中Case的替换

public class Fun{

        public void NameResult(String flag)  

        {

          Dictionary<string, string> cl = new Dictionary<string, string>();

                       cl.Add("a","不及格");

                       cl.Add("张三","良好");

                       cl.Add("c","一般");

                      cl.Add("g","不及格");
         foreach (KeyValuePair<string, string> a in cl)
                  {
              if(a.key==flag)

              {

                 Console.WriteLine(a.Value);

                 return ;                                          

              }

                  }
         Console.WriteLine("");

        }

}

另外,很多时候,我们可能根据某个值直接去执行某个方法,这时,采用以上方法也是可行的,

  先声明一个委托

private delegate void EatDelegate();

     private  void functionOne(){

        Console.WriteLine("优秀");
                               }

    Dictionary<string, EatDelegate> cl = new Dictionary<string, EatDelegate>();
          cl.Add("a",functionOne);

         foreach (KeyValuePair<string, string> a in cl)
                  {
              if(a.key==flag)

              {

                 a.Value();

                return;                      

              }

                  }        
时间: 2024-10-15 06:40:47

Switch重构处理的相关文章

第1章 重构,第一个案例(3):运用多态取代switch

3. 运用多态取代与价格相关的条件逻辑 3.1 switch和“常客积分”代码的再次搬迁 (1)switch:最好不要在另一个对象的属性上运用switch语句 switch(getMovie().getPriceCode()) //在movie对象的priceCode属性上运用switch { //这意味着可以将getCharge函数从Rental类移动到Movie类去 //选择在Movie类中封装计算费用功能,还有一个 //原因,就是可以控制因影片类型变化导致的计算 //方式变化,从而对其它对

代码重构--switch的惊恐现身

switch作为条件判断(分支结构)中的一种方式,以至于我们对于它使用的频率处于较高水平的水平线上,为此我们应该使用Extra method来对这类判断条件进行抽取,另外从我自身而言,我发现我以前常常在当中根据不同的值,做不同的操作,而这类操作我是直接写在case里面的!而这里<重构>的作者并没有明确的讲明这样做的好处到底在哪里?我们现在就拿我们前一篇文章来作接下来的讲解. 没有看过前一篇文章的,点击这里带你看哦 现在我们模拟一个场景,作为项目经理的老王,告诉程序员小新说:现在我们的影片类型需

重构第四天 : 用多态替换条件语句(if else &amp; switch)

面相对象的一个核心基础就是多态,当你要根据对象类型的不同要做不同的操作的时候,一个好的办法就是采用多态,把算法封装到子类当中去. 重构前代码: 1 public abstract class Customer 2 { 3 } 4 5 public class Employee : Customer 6 { 7 } 8 9 public class NonEmployee : Customer 10 { 11 } 12 13 public class OrderProcessor 14 { 15

重构:越来越长的 switch ... case 和 if ... else if ... else

在代码中,时常有就一类型码(Type Code)而展开的如 switch ... case 或 if ... else if ... else 的条件表达式.随着项目业务逻辑的增加及代码经年累月的修改,这些条件判断逻辑往往变得越来越冗长.特别是当同样的逻辑判断出现在多个地方的时候(结构示意如下),代码的可读性和维护难易程度将变得非常的糟糕.每次修改时,你必须找到所有有逻辑分支的地方,并修改它们. 1 switch(type) 2 { 3 case "1": 4 ... 5 break;

C语言switch/case圈复杂度优化重构

软件重构是改善代码可读性.可扩展性.可维护性等目的的常见技术手段.圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一. C语言开发的项目中,switch/case代码块是一个很容易造成圈复杂度超标的语言特性,所以本文主要介绍下降低switch代码段的重构手段(如下图).switch圈复杂度优化重构可分为两部分:程序块的重构和case的重构.程序块重构是对代码的局部优化,而case重构是对代码的整体设计,

重构11-Switch to Strategy(Switch到策略模式)

重构没有固定的形式,多年来我使用过不同的版本,并且我敢打赌不同的人也会有不同的版本. 该重构适用于这样的场景:switch语句块很大,并且会随时引入新的判断条件.这时,最好使用策略模式将每个条件封装到单独的类中.实现策略模式的方式是很多的.我在这里介绍的策略重构使用的是字典策略,这么做的好处是调用者不必修改原来的代码. public class ClientCode { public double CalculateShipping() { ShippingInfo shippingInfo =

重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考

http://www.cnblogs.com/insus/p/4142264.html 首先普世的编程架构好坏评判是SOLID(单一功能.开闭原则.里氏替换.接口隔离以及依赖反转) 具体来说,就是当有需求的curd时候,代码应该1)涉及的文件尽可能的少2)修改的文件行数尽可能的少3)修改的文件行块间距不应该太长,避免程序员在一个文件中来回移动.鼠标点击数尽可能少.避免影响思路.4)不应该影响其他模块的.这样就不必全面回归测试.5)鲁棒性:即使输入错误,也不应该系统崩溃. 那么,我们来看看这篇洋洋

重构if...else...或者switch程序块

我们在开发asp.net时,经常有使用if...else...或者是使用switch来进行多个条件判断.如下面这篇<用户控件(UserControl) 使用事件 Ver2>http://www.cnblogs.com/insus/archive/2011/11/18/2253605.html,就是一段代码: 其实按上面的写法一点问题都没有,但是我们在审检代码看到这段代码时似乎要花点时间阅读,用意也不够明朗,藕合性也高. 建议把每个case块写成一个独立的方法.然后再调用它,目的是为最小化方法.

使用状态模式来重构Switch语句

[使用状态模式来重构Switch语句] 以下代码在一个Switch中处理了多个情况,当case越来越多或每个case逻辑越来越多时,会产生臃肿难以维护的代码. 状态模式常用于优化Switch的此种弊病.重构手段一,使用继承. 继续优化,使用状态模式. 这里使用的重构技术叫 Replace Type Code with State/Strategy.要注意,此种修改对于小量代码反而是种负担.