关于switch case怎么优化代码啊
大家都知道一个语句代码太多,维护会不方便,且难以理解。这个时候我们就要用到重构,请问switch case语句怎么重构呢,怎么优化这样的代码,给个链接也可以,要有效才行,立即给分。
下面是一个例子
int i;
switch(i)
{
case 0;
DoResult(i);
break;
case 1:
Doresult(i);
break;
case 2:
DoResult(i);
break;
.....
下面有一百个这样的case语句
}
//DoResult()是一个函数,其实这里应该有一个返回值吧,简单点,大家懂就行。
当case太多的时候,显然不合理。这里的重复代码太多,麻烦大家想一下,怎么能去掉这个switch case,换做其他的语句代替它。
------解决方案--------------------《代码大全2》 中说可以使用字典来代替N多If else
.NET还有linq 是非常爽歪歪的事情
Dictionary<int,委托> dic=new Dictionary<int,委托>()
dic.Add(1,DoResult);
dic.Add(2,DoResult);
var fun=dic.Single(x=>x.Key==N);
var result = fun(arg);
没有试过,你自己试试~
------解决方案-------------------- 这个我觉得得用函数表什么的解决吧
wireshark内部有好多表,用来解析协议。
比如,tcp的端口字段,每个端口可能代表一种应用层协议
它就不是switch/case的
而是维护一张表(应该是hash吧),每个上层协议将它的端口值和对应的解析函数地址注册到此表中。
------解决方案--------------------我8楼说法的简单模拟:
// action声明
typedef void (*Action) (void);
// action 1, case 1时执行
void do_1()
{
cout << "action 1" << endl;
}
// action 2, case 2时执行
void do_2()
{
cout << "action 2" << endl;
}
// action选择器
void do_action(Action table[], int i)
{
table[i-1]();
}
int main()
{
// action表
Action table[2];
// 各case值注册到action表
table[0] = do_1;
table[1] = do_2;
// 根据值执行相应的action
do_action(table, 1);
return 0;