关于if语句:c# if else , if , , switch case

C# if else vs if or vs switch case

本问题已经有最佳答案,请猛点这里访问。

我试图使我的代码更快,我有很多if-else和if-or-in。我知道如果你有超过5个if/箱的话,切换箱会更快。那么,if-elseif-or的速度是多少呢?

1
2
3
4
5
6
7
8
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
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
}

还是我只带着开关盒走?

1
2
3
4
5
6
7
8
9
switch(item.Datum.Substring(5, 5))
{
   case"06-20","06,21":
      Something
      break;
   case"06-22","06,23":
      Something
      break;
}


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

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

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


我会去寻找:

1
2
3
4
5
6
7
8
9
10
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:
    ...
}


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

为什么要这样的哲学?一个词:可测试性。每次添加行时,都必须确保对其行为进行测试。我不特别喜欢switchsynthax,但当它把线数除以2时,我就接受它。