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

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 --------------------编程问答--------------------
引用 1 楼 SocketUpEx 的回复:
要消灭if

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这样应该能减少比较次数. --------------------编程问答-------------------- 任何逻辑和算法其实都是依托于特定的数据结构产生的。
所以,一个劣质的数据结构是不可能有什么优秀的处理逻辑的。
首先问自己的是,这个数据结构是否可以按照需求修改的更合理一点。
如果不能的话,就目前而言,没什么漂亮的处理逻辑,所谓的漂亮只是代码行数的区别而已。 --------------------编程问答-------------------- 本人觉的还是从业务的需求上多考虑一下

需求有点不合理 --------------------编程问答--------------------
引用 7 楼 superybq 的回复:
字符串比较效率比较差,把b1,b2,b3,b4换成bool型的true false应该能提升一点吧.
然后就是不要每次都比较b1,b2,b3,b4,可以先比较b1,然后分为b1为OK的情况和b1为""的情况,再比较b2再b3 b4这样应该能减少比较次数.

的确是是个好方法,可b1,b2,b3,b4是从数据库中获取的数据,相当于一个变量啊!!纠结!! --------------------编程问答--------------------
引用 10 楼 pzj123456 的回复:
引用 7 楼 superybq 的回复:字符串比较效率比较差,把b1,b2,b3,b4换成bool型的true false应该能提升一点吧.
然后就是不要每次都比较b1,b2,b3,b4,可以先比较b1,然后分为b1为OK的情况和b1为""的情况,再比较b2再b3 b4这样应该能减少比较次数.
的确是是个好方法,可b1,b2,b3,b4是从数据库中获取的数据,相当于一……


有什么地方纠结的吗? --------------------编程问答-------------------- 除
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,