注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

薛沛然 廊坊师范学院 九期信息技术提高班

无脑地生活,像白痴一样成长,不给自己留感伤的时间。。。

 
 
 

日志

 
 

改造switch case  

2015-01-31 16:21:03|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
前一段时间的学习中遇到了很多需要使用switch case的地方,如果case过多,会使程序过于臃肿。通过下面一个实例来学习如何改造sweich case.
public string SayHello(string name)
{
      string answer="";
     switch(name)
       {
           case "hanyu":
               answer=hanyu();
               break;
           case"yingyu":
                answer=yingyu();
       }
}
public string hanyu()
{
     return "你好";
}
public string yingyu()
{
    return "hello";
}
这样写得坏处显而易见,如果SayHello()是不断变化的,需要不断地把新的判断放进SayHello里,这样就破坏了开闭原则。下面是从csdn论坛学到的东西
static string SayHello(Func<string> method)
{
  return method();
}
static string yingyu()
{
   return "hello";
}
static void Main(string[] args)
{
     Dictionary<string,Function<string>> sc1 = new Dictionary<string,Function<string>>();
     sc1.Add("fun1",yingyu);
     SayHello(sc1["fun1"]); 
}
在SayHello方法中通过键值对让参数和方法名进行了一一绑定,只要输入相匹配的参数名,就会跳转到对应的方法里。可扩展性得到了提升,避免了开闭原则的破坏。
委托版
public static string yingyu()
{
    return "hello";
}
public static string hanyu()
{
    return "你好";
public delegate string GetHello();
public static string SayHello( GetHello gethello)
{
   return gethello();
}
static void Main(string[] args)
{
   SayHello(hanyu)
}
相对于上面的写法,委托的简单应用让代码更简洁了。
其实存在即有理,switch语句让代码变得很简洁。但是如果case过多,就容易把人看蒙了。在可装配/可配置/插件式的程序中,或者swich里面的条件会经常扩展的情况下,适合对switch进行改造。
  评论这张
 
阅读(56)| 评论(3)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017