代码之家  ›  专栏  ›  技术社区  ›  Sefan

C#if else vs if or vs switch case[重复]

  •  2
  • Sefan  · 技术社区  · 11 年前

    我试图让我的代码更快,我得到了很多If else和If或If。我知道如果你得到了超过5个If/case,switch case会更快。那么速度有多快 if-else 与。 if-or ,它们是一样的吗?

    if (item.Datum.Substring(5, 5) == "06-20" || item.Datum.Substring(5, 5) == "06-21")
    {
      Something
    }
    else if item.Datum.Substring(5, 5) == "06-22" || item.Datum.Substring(5, 5) == "06-23")
    {
      Something
    }
    

    if (item.Datum.Substring(5, 5) == "06-20") 
    {
      Something
    }
    else if (item.Datum.Substring(5, 5) == "06-21")
    {
      Something
    }
    else if (item.Datum.Substring(5, 5) == "06-22")
    {
      Something
    }
    else if (item.Datum.Substring(5, 5) == "06-23")
    {
      Something
    }
    

    还是让我拿开关盒?

    switch(item.Datum.Substring(5, 5))
    {
       case "06-20", "06,21":
          Something
          break;
       case "06-22", "06,23":
          Something
          break;
    }
    
    3 回复  |  直到 11 年前
        1
  •  1
  •   Shekhar Pankaj    11 年前

    在某些情况下,等价的switch语句比if语句或if语句链慢。使用频率启发式,您可以在许多程序中使用if语句优化快速路径。

    查看此链接,您将发现两种不同的比较

    http://www.dotnetperls.com/if-switch-performance

        2
  •  0
  •   artragis    11 年前

    当出现这样一个问题时,我的哲学是:你写得越少越好。

    为什么这样的哲学?一个词:可测试性。
    每次添加行时,都必须确保其行为经过测试。我不特别喜欢 switch synthax,但当它将行号除以2时,我就接受了。

        3
  •  0
  •   Michel Keijzers    11 年前

    我会选择:

     dayStr = item.Datum.Substring(5, 5))
     day = 'split '-', ',' and convert to int'
     switch day:
     {
        case 20: // Fall through
        case 21:
           // Do something
    
        case 22:
        ...
    }