c# 变量判断与代码优化
我这有个问题,麻烦各位帮我解答下,谢了先!我从数据库中获取了四个值,分别是b1,b2,b3,b4
这四个变量只可能有两个值,要么等于"OK"要么等于空值,在这四个变量下又有四个变量t1,t2,t3,t4
若其中一个变量为OK就比较下面的t1变量。
我是用IF else的,但耗时比较长,能不能帮我优化下?以下是部分代码:
if (b1 == "OK" && b2 == "" && b3 == "" && b4 == "")
{
if (t3 <= t4 && t3 <= t2)//EL最小
{
SerchELData(c1);
}
else if (t4 <= t3 && t4 <= t2)//xrd
{
SerchXrd(c1);
}
else if (t2 <= t3 && t2 <= t4)//表面
{
serchmj(c1);
}
}
else if (b2 == "OK" && b1 == "" && b3 == "" && b4 == "")
{
if (t1 <= t2 && t1 <= t4)//pl
{
SerchPl(c1, c2, c3, c4);
}
else if (t2 <= t1 && t2 <= t4)//表面
{
serchmj(c1);
}
else if (t4 <= t1 && t4 <= t2)//xrd
{
SerchXrd(c1);
}
}
else if (b3 == "OK" && b1 == "" && b2 == "" && b4 == "")
{
if (t1 <= t2 && t1 <= t3)//PL
{
SerchPl(c1, c2, c3, c4);
}
else if (t2 <= t1 && t2 <= t3)//BM
{
serchmj(c1);
}
else if (t3 <= t1 && t3 <= t2)//EL
{
SerchELData(c1);
}
}
else if (b4 == "OK" && b1 == "" && b2 == "" && b3 == "")
{
if (t1 <= t3 && t1 <= t4)//pl
{
SerchPl(c1, c2, c3, c4);
}
else if (t3 <= t1 && t3 <= t4)//el
{
SerchELData(c1);
}
else if (t4 <= t1 && t4 <= t3)//xrd
{
SerchXrd(c1);
}
}
else if (b1 == "OK" && b2 == "OK" && b4 == "" && b3 == "")
{
if (t2 <= t4)
{
serchmj(c1);
}
else
{
SerchXrd(c1);
}
}
else if (b1 == "OK" && b3 == "OK" && b2 == "" && b4 == "")
{
if (t2 <= t3)//表面
{
serchmj(c1);
}
else
{
SerchELData(c1);//EL
}
}
else if (b2 == "OK" && b3 == "OK" && b1 == "" && b4 == "")
{
if (t1 <= t2)//pl
{
SerchPl(c1, c2, c3, c4);
}
else//表面
{
serchmj(c1);
}
}
else if (b1 == "OK" && b4 == "OK" && b2 == "" && b3 == "")
{
if (t3 <= t4)//EL
{
SerchELData(c1);
}
else
{
SerchXrd(c1);//XRD
}
}
else if (b2 == "OK" && b4 == "OK" && b1 == "" & b3 == "")
{
if (t1 <= t4)
{
SerchPl(c1, c2, c3, c4);//pl
}
else
{
SerchXrd(c1);//xrd
}
}
else if (b1 == "" && b2 == "" && b3 == "OK" & b4 == "OK")
{
if (t1 <= t3)//pl
{
SerchPl(c1, c2, c3, c4);
}
else//el
{
SerchELData(c1);
}
}
else if (b1 == "OK" && b2 == "OK" && b3 == "OK" && b4 == "")
{
serchmj(c1);//表面
}
else if (b1 == "OK" && b2 == "OK" && b4 == "OK" && b3 == "")
{
SerchXrd(c1);//xrd
}
else if (b1 == "OK" && b3 == "OK" && b4 == "OK" && b2 == "")
{
SerchELData(c1);//el
}
else if (b2 == "OK" && b3 == "OK" && b4 == "OK" && b1 == "")
{
SerchPl(c1, c2, c3, c4);//pl
}
else if (b1 == "OK" && b2 == "OK" && b3 == "OK" && b4 == "OK")
{
}
c# 优化 --------------------编程问答-------------------- 要消灭if
--------------------编程问答-------------------- string s = "";
s += (b1 == "OK") ? "1" : "0";
s += (b2 == "OK") ? "1" : "0";
s += (b3 == "OK") ? "1" : "0";
s += (b4 == "OK") ? "1" : "0";
switch (s)
{
case "1000":
break;
default:
break;
} --------------------编程问答-------------------- 楼主不知道是否用过标志位
一组开关的样子
数据库里面存也只需要一个字段就可以了
具体不赘述 请看http://www.cnblogs.com/shuiguang/archive/2012/07/25/2608475.html --------------------编程问答--------------------
b1,b2,b3,b4等于ok的话,底下还有个控制条件t1,t2,t3,t4怎么判定? --------------------编程问答-------------------- 判断是必须的,可以用bool型代替字符串比较,如b1="OK" 用isb1等。
把公用的判断先判断好 如t1和t2,
还有将共同的放到一个大的if中 如太多的b1="OK"
还有t1-t4的规律怎么寻。 --------------------编程问答-------------------- 除楼上几位高手,还有高手能来帮我下么??求救啊。。。。 --------------------编程问答-------------------- 字符串比较效率比较差,把b1,b2,b3,b4换成bool型的true false应该能提升一点吧.
然后就是不要每次都比较b1,b2,b3,b4,可以先比较b1,然后分为b1为OK的情况和b1为""的情况,再比较b2再b3 b4这样应该能减少比较次数. --------------------编程问答-------------------- 任何逻辑和算法其实都是依托于特定的数据结构产生的。
所以,一个劣质的数据结构是不可能有什么优秀的处理逻辑的。
首先问自己的是,这个数据结构是否可以按照需求修改的更合理一点。
如果不能的话,就目前而言,没什么漂亮的处理逻辑,所谓的漂亮只是代码行数的区别而已。 --------------------编程问答-------------------- 本人觉的还是从业务的需求上多考虑一下
需求有点不合理 --------------------编程问答--------------------
的确是是个好方法,可b1,b2,b3,b4是从数据库中获取的数据,相当于一个变量啊!!纠结!! --------------------编程问答--------------------
有什么地方纠结的吗? --------------------编程问答-------------------- 除
补充:.NET技术 , C#