一步一步去掉这一类switch Case

先亮相“这一类”

 

Get_MCODE_Desc
public static string Get_MCODE_Desc(string MCODE)
        {
            
switch (MCODE)
            {
                
case "101000":
                    
return "链路检测(Network Management)";

                
case "101001":
                    
return "业务前置机签到交易(Sign On)";

                
case "101002":
                    
return "业务前置机签退交易(Sign Off)";

                
case "101010":
                    
return "订购关系查询(Order Relationship Query)";

                
case "101071":
                    
return "子应用状态查询(Sub_Application status Query)";

                
case "101011":
                    
return "发卡请求(空中、写卡器)(Create Sub Application Request)";

                
case "101012":
                    
return "卡片操作结果通知(写卡器)(Terminal Card Operation Result)";

                
case "101021":
                    
return "业务前置机挂失通知(Prehost Report Of Loss)";

                
case "101022":
                    
return "解挂通知(Cancel Report Of Loss)";

                
case "101031":
                    
return "注销请求(空中、写卡器)(Cancellation Request)";

                
case "101032":
                    
return "废卡请求(Annul Card Request)";

                
case "101041":
                    
return "个人化信息更新请求(空中)(Update Sub_Application)";

                
case "101051":
                    
return "恢复企业初始主控密钥(Reload Keys)";

                
case "101061":
                    
return "信息服务通知(Message Send)";

                
case "101062":
                    
return "信息状态查询(Message Status Query)";

                
case "101081":
                    
return "机具状态数据上报(Terminal Status)";

                
case "101091":
                    
return "卡片操作请求(Card Operation Request)";

                
case "102011":
                    
return "空中卡片操作结果通知(Air Card Operation Result)";

                
case "102021":
                    
return "一卡通业务前置机应用停止通知(Prehost Application Stop)";

                
case "102031":
                    
return "信息查询请求(Message Query Request)";

                
case "102041":
                    
return "服务系统挂失通知(ServiceSystem Report Of Loss)";

                
case "108001":
                    
return "企业客户端查询前置状态(Query PreHost Status)";
            }
            
return "未知交易码";
        }
    }

 

 

再来去掉的方法:

 

StrCodeDescription
       /// <summary>
        
/// 
        
/// </summary>
        
/// <param name="iCode">传入业务代码</param>
        
/// <returns>返回业务描述</returns>
        public static string StrCodeDescription(int iCode)
        {
            
string strResult;
            Dictionary
<int, String>  mCodeDescription= new Dictionary<intstring>
                                                           {
                                                               {
101000"链路检测(Network Management)"},
                                                               {
101001"业务前置机签到交易(Sign On)"},
                                                               {
101002"业务前置机签退交易(Sign Off)"},
                                                               {
101010"订购关系查询(Order Relationship Query)"},
                                                               {
101011"发卡请求(空中、写卡器)(Create Sub Application Request)"},
                                                               {
101012"卡片操作结果通知(写卡器)(Terminal Card Operation Result)"},
                                                               {
101021"业务前置机挂失通知(Prehost Report Of Loss)"},
                                                               {
101022"解挂通知(Cancel Report Of Loss)"},
                                                               {
101031"注销请求(空中、写卡器)(Cancellation Request)"},
                                                               {
101032"废卡请求(Annul Card Request)"},
                                                               {
101041"个人化信息更新请求(空中)(Update Sub_Application)"},
                                                               {
101051"恢复企业初始主控密钥(Reload Keys)"},
                                                               {
101061"信息服务通知(Message Send)"},
                                                               {
101062"信息状态查询(Message Status Query)"},
                                                               {
101071"子应用状态查询(Sub_Application status Query)"},
                                                               {
101081"机具状态数据上报(Terminal Status)"},
                                                               {
101091"卡片操作请求(Card Operation Request)"},
                                                               {
102011"空中卡片操作结果通知(Air Card Operation Result)"},
                                                               {
102021"一卡通业务前置机应用停止通知(Prehost Application Stop)"},
                                                               {
102031"信息查询请求(Message Query Request)"},
                                                               {
102041"服务系统挂失通知(ServiceSystem Report Of Loss)"},
                                                               {
108001"企业客户端查询前置状态(Query PreHost Status)"}
                                                           };
                       
            strResult 
= "未知交易码";

            
foreach (var item in mCodeDescription)
            {
                
//int iSearch = Search(item., 0, 21, 11);
                if(item.Key == iCode)
                {
                    strResult 
= item.Value;
                }
            }

            
return strResult;
        }

 

我们来测试一下运行情况

代码
Using Xunit;//用的Resharp 的Xunit插件

    
public class Test01
    {
        [Fact]
        
public void Test()
        {
            Stopwatch timer 
= new Stopwatch();
            
decimal micro;

            timer.Start();
            
string str = MCodeDesc.Get_MCODE_Desc("101021");
            Console.WriteLine(str);
            timer.Stop();

            micro 
= timer.Elapsed.Ticks / 10m;
            Console.WriteLine(
"Execution time was {0:F1} microseconds.", micro);

            timer 
= Stopwatch.StartNew();

            timer.Start();
            Console.WriteLine(MCodeDesc.StrCodeDescription(
101021));
            timer.Stop();

            micro 
= timer.Elapsed.Ticks / 10m;
            Console.WriteLine(
"Execution time was {0:F1} microseconds.", micro);

            timer 
= Stopwatch.StartNew();

            timer.Start();
            Console.WriteLine(MCodeDesc.StrCodeDescription(
101025));
            timer.Stop();

            micro 
= timer.Elapsed.Ticks / 10m;
            Console.WriteLine(
"Execution time was {0:F1} microseconds.", micro);
        }
    }

 

 

测试结果:

 

Test01.Test : Passed

业务前置机挂失通知(Prehost Report Of Loss)
Execution time was 3075.8 microseconds.
业务前置机挂失通知(Prehost Report Of Loss)
Execution time was 3645.3 microseconds.
未知交易码
Execution time was 4.6 microseconds.

 

还能优化吗?

 

StrCodeDescription

        
/// <summary>
        
/// 
        
/// </summary>
        
/// <param name="iCode">传入业务代码</param>
        
/// <returns>返回业务描述</returns>
        public static string StrCodeDescription(int iCode)
        {
            
string strResult;
            Dictionary
<int, String>  mCodeDescription= new Dictionary<intstring>
                                                           {
                                                               {
101000"链路检测(Network Management)"},
                                                               {
101001"业务前置机签到交易(Sign On)"},
                                                               {
101002"业务前置机签退交易(Sign Off)"},
                                                               {
101010"订购关系查询(Order Relationship Query)"},
                                                               {
101011"发卡请求(空中、写卡器)(Create Sub Application Request)"},
                                                               {
101012"卡片操作结果通知(写卡器)(Terminal Card Operation Result)"},
                                                               {
101021"业务前置机挂失通知(Prehost Report Of Loss)"},
                                                               {
101022"解挂通知(Cancel Report Of Loss)"},
                                                               {
101031"注销请求(空中、写卡器)(Cancellation Request)"},
                                                               {
101032"废卡请求(Annul Card Request)"},
                                                               {
101041"个人化信息更新请求(空中)(Update Sub_Application)"},
                                                               {
101051"恢复企业初始主控密钥(Reload Keys)"},
                                                               {
101061"信息服务通知(Message Send)"},
                                                               {
101062"信息状态查询(Message Status Query)"},
                                                               {
101071"子应用状态查询(Sub_Application status Query)"},
                                                               {
101081"机具状态数据上报(Terminal Status)"},
                                                               {
101091"卡片操作请求(Card Operation Request)"},
                                                               {
102011"空中卡片操作结果通知(Air Card Operation Result)"},
                                                               {
102021"一卡通业务前置机应用停止通知(Prehost Application Stop)"},
                                                               {
102031"信息查询请求(Message Query Request)"},
                                                               {
102041"服务系统挂失通知(ServiceSystem Report Of Loss)"},
                                                               {
108001"企业客户端查询前置状态(Query PreHost Status)"}
                                                           };

//就在这里优化吧
            if (!mCodeDescription.TryGetValue(iCode, out strResult))
            {
                strResult 
= "未知交易码";
            }

            
return strResult;
        }

 

 

再看看运行结果

业务前置机挂失通知(Prehost Report Of Loss)
Execution time was 3313.1 microseconds.
业务前置机挂失通知(Prehost Report Of Loss)
Execution time was 2776.1 microseconds.
未知交易码
Execution time was 4.2 microseconds.

 

 

posted @ 2011-01-24 11:20 彭杰斌 阅读(159) 评论(2) 编辑 收藏