当前位置:编程学习 > C#/ASP.NET >>

不用switch,还有什么办法?

平时我们用switch,都这样用
var xx="";
switch(i)
{
case 1:
   xx="a";
   break;
case 2:
   xx="abc";
   break;
defalt:
   xx="a";
   break;
}
当然用if也是一样的
但是这样写有一个很大的弊端,就是以后如果case的枚举有变化的时候,不得不修改代码!
有什么面像对象的办法,不用switch和if,来实现这种判断,并且很方便的扩展呢?
求达人解答 --------------------编程问答-------------------- if  else --------------------编程问答-------------------- 。。。。。。。。
这些是最基本的做法吧。。。
OO编程,方便是封装,继承,多态
用那些可以,很大情度上,减少代码,增加重用性,维护性,但在基本做法上,是没法减的了。。。 --------------------编程问答-------------------- 不用switch和if
==========
那你就在数据库建一张表
用来存储i和xx的关系:  id, i,xx   (i设置唯一标记索引)
int i=1;
string sql="select xx from tb where i="+i;

下次case出现新分支时,只要在数据库表内添加一条新数据 --------------------编程问答-------------------- 只是这样的赋值的话,用反射和集合遍历也可以,类似HashTable...不过还是switch效率最高吧 --------------------编程问答-------------------- switch可以用啊,如果要动动态的话只能是建表存储相关条件 --------------------编程问答-------------------- 還是swicth if好點吧 --------------------编程问答--------------------
引用 3 楼 q107770540 的回复:
不用switch和if
==========
那你就在数据库建一张表
用来存储i和xx的关系: id, i,xx (i设置唯一标记索引)
int i=1;
string sql="select xx from tb where i="+i;

下次case出现新分支时,只要在数据库表内添加一条新数据


+swicth if  
目前只能想出这些 --------------------编程问答-------------------- 表吧. --------------------编程问答-------------------- 有数据库简单点 路过 --------------------编程问答-------------------- if 
else --------------------编程问答-------------------- 可以用委托 --------------------编程问答-------------------- if
else --------------------编程问答-------------------- switch多了,可以考虑用工厂模式 --------------------编程问答-------------------- 呵呵,很简单嘛,定义一个枚举A,后台写代码:
string[] names = Enum.GetNames(typeof(A));
if(names.Contains(i.toString()))
{
 ...
}
这样你的枚举A也可以扩展啊。
注意引用System.Linq命名空间。 --------------------编程问答-------------------- 将case 的值变成枚举中的一项。。 --------------------编程问答-------------------- 用数据库,存储字段和sql --------------------编程问答-------------------- 3楼应该可以

如果项不多,且不经常变化,这样做是不值得的 --------------------编程问答-------------------- 反射。 --------------------编程问答-------------------- 用 xml 将条件,都写在xml中,然后去循环对比呗! --------------------编程问答-------------------- 18楼说的对,反射 + 配置文件,实现一个控制反转。这样就不用判断了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,