字典表+委托替代switch解决思路
参考:http://www.jianshu.com/p/8887b3b3e8ba
代码
namespace 解决Switch
{
class Program
{
delegate string func(); static void Main(string[] args)
{
var dict = new System.Collections.Generic.Dictionary<string, func>(); dict["apple"] = new func(apple);
dict["google"] = new func(google);
dict["ibm"] = new func(ibm); string cmd;
while ("exit" != (cmd = System.Console.ReadLine()))
{
if (dict.ContainsKey(cmd))
System.Console.WriteLine(dict[cmd]());
}
} static string apple() { return "apple()哈哈哈"; }
static string google() { return "google()嘻嘻嘻"; }
static string ibm() { return "ibm()呵呵呵"; }
}
}
------解决方案--------------------
这种思路我觉得很好啊,效率比switch更快。switch相当于依次比较的,而字典表只需要比较一次(查一次hash表)更重要的是容易扩展。
------解决方案--------------------
貌似只有在枚举上才用switch
switch必须是const,除了枚举,没什么写死了的
并且枚举switch的代码可以自动生成
------解决方案--------------------
这样是可以的。
但是比switch要慢,比if也慢。但是这种模式比较适合分支扩展和运行时注入分支逻辑。
属于消息的一种。从效率上来说与switch和if没法比,这一点可以自行测试。
------解决方案--------------------
...感觉就是visitor
字典表+委托替代switch解决思路的更多相关文章
- 用反射或委托优化switch太长的方法
在代码进行优化的时候,发现了switch case太长,有的竟然长达30个远远超过一屏这样在代码的可读性来说很差.特别在我们看代码的时候要拉下拉框我个人觉得这是不合理的.但是我不建议有switch就进 ...
- centos/windows服务器,Mysql数据库表结构损坏-已解决
[问题原因]服务器突然断电 [故障报告]数据库表结构损坏 [解决思路]进入强制恢复模式,备份库表及数据重建 故障发现 周末公司断电,周一启动数据库就直接报错了 查看日志 上面标记的log,明确表示是非 ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- MaterialDesignInXamlToolkit“无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容”异常的解决思路
前言: 最初是想解答园友"小代码大世界 "的问题,后来想举一反三,将这个问题简单剖析下,做到知其所以然. MaterialDesignInXAML 控件库高度封装,有一些控件在使用 ...
- ArcMap基于Oracle出现sde.instances_util.check_instance_table_conflicts:: ORA-00942:表或视图不存在/table or view doesnot exist解决思路
SDE环境:Oracle12C+ArcMap10.7+WinServer2012 出现问题情况: 1.SDE可以连接正常打开,但就是无法新建要素.导入要素等: 1)在根目录新建或导入要素,弹出提示: ...
- 多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )
如果你还是不太懂位运算,请看我的文章:那些年我们一起遗忘的位运算! 下面是我在这次项目中学习到的,我眼中的位运算的应用!主要是实现 通知的3个操作: 1. 置顶 2. 设为首页 3. 同时为 “ ...
- mysql在线修改表结构大数据表的风险与解决办法归纳
整理这篇文章的缘由: 互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需 ...
- 《分销系统-原创第一章》之“多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )
此项目需求就是根据给用户分配的权限,进行相应的权限模块浏览功能,因为项目不是很大,所以权限没有去用一张表去存,我的解决思路如下,希望大家给点建议. 数据库用户表结构如下: 数据库表梳理: BankUs ...
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
根据我的实践,在Windows平台下设计并实现一个C++插件系统,需要解决几个关键技术问题.下面我谈谈需要解决的几个关键技术问题以及我想到的简单的解决思路.由于我主要专注于Windows平台C++程序 ...
随机推荐
- Android ActionBar仿微信界面
ActionBar仿微信界面 1.学习了别人的两篇关于ActionBar博客,在结合别人的文章来仿造一下微信的界面: 思路如下:1).利用ActionBar生成界面的头部,在用ActionBar的Ac ...
- 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流
[bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...
- 渗透测试工具实战技巧 (转载freebuf)
最好的 NMAP 扫描策略 # 适用所有大小网络最好的 nmap 扫描策略 # 主机发现,生成存活主机列表 $ nmap -sn -T4 -oG Discovery.gnmap 192.168.56. ...
- ASPxGridView后台实现隐藏新增按钮
(ASPxGridView2.Columns[0] as GridViewCommandColumn).NewButton.Visible = false;//0应该代表的是NewButton所在的列 ...
- scrapy中通过set()方法进行数据过滤去重
我们经常在抓取数据是碰到 数据重复的问题,除了radis数据库去重功能外,还有一种简便的过滤方法, 来来 我们直接上代码: pipelines.py中: from scrapy.exceptions ...
- Java面向对象之关键字final 入门实例
一.基础概念 1.关键字final可以修饰类.函数.变量. 2.关键字final修饰的类不可以被继承. 3.关键字final修饰的方法不可以被覆盖. 4.关键字final修饰的变量是一个常量,只能被赋 ...
- 微信开发——测试号申请,接口配置,JS接口安全域名,自定义菜单
1.申请测试账号: 先申请公众号后,点击进入公从号的管理页面:找到“开发者工具”,找到“公众平台测试账号”,点击“进入”. 2.接口配置信息设置 必须要外网哦,也就是微信服务器要能访问到你填写到url ...
- Web 安全入门-书籍及建议
https://www.jianshu.com/p/6dcebd54fb24 (本文源于转载或摘抄整理) 2016-06-12 Fooying 优主张 最近比较忙,灵感稍微有点缺乏,本着宁缺毋滥的想法 ...
- Spring核心--IOC&AOP
Ioc(控制反转) 所谓的控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转. AOP(面向切面编程) ...
- JDBC解决中文乱码
本文转载自https://www.liyongzhen.com/jdbc/jdbc-character 在使用JDBC开发的过程中,通常会遇到中文保存到数据库乱码的问题. 这个问题的产生有3个方面: ...