2012-08-01 40 views
0

我有一个SELECT/SWITCH语句继续增长......我想我应该完成。
但是,目前有19个选项......有没有比这更好的东西?SWITCH CASE语句是否会变得太大?

编码在C#

IE:

switch (Request["typeOfRequest"].ToString()) 
     { 
      case "comboFills": 
       Response.ContentType = "text"; 
       Response.Write(getVizData()); 
       break; 
      case "linkFormField": 
       Response.ContentType = "text"; 
       Response.Write(getVizRuleFields()); 
       break; 
      case "getDispositions": 
+2

这一切都取决于上下文。你有什么办法可以重组你的逻辑吗? – 2012-08-01 15:36:19

回答

2

switch语句可能比那更大的......不过,最终你可能会碰到效率的担忧。我认为这19起案件不是问题。我有更大的发言。通常switch语句不是一个处理瓶颈,所以这是你优化的最后一件事。

每种情况都会转化为CPU作为测试和跳转,因此请考虑最坏情况会发生多少次操作,并决定是否值得大惊小怪,以及您实际存储多少次操作(最坏情况和平均值)。

说到这里,有几个明显的选择。如果您有数字类型,它们均匀分布,可以拆分的switch语句到多台交换机....

if value < 50 
    switch 
    ... 
    end 
else if value < 100 
    switch 
    ... 
    end 
else 
    ... 
end 

这当然是棘手的维护,并可以依靠的常数值的知识,让您的代码丑陋。这真的只是一个难看的搜索树...

另一种方法是将所有的情况下放入函数,并建立一个树或哈希表,将每个值映射到函数处理程序。这样你总是可以依靠O(logN)搜索时间(或者更好,在散列表的情况下)。我再说一遍,除非你有很好的理由,否则不要这样做。

希望能帮助你给一些见解。对于不是语言特定的道歉。你没有提到一种语言,但我认为它就像BASIC。

+0

如果它是BASIS之类的东西,那么您将使用'Select Case'进行编码。 – tomdemuyt 2012-08-01 15:58:31

+0

是的,我有点困惑,因为标题说“开关盒”,问题身体说“选择”。 – paddy 2012-08-01 16:04:19

+0

对不起 - 我在C编码# – 2012-08-01 16:21:00