C#if else vs if或vs switch case

时间:2014-07-24 07:17:05

标签: c# if-statement case

我试图让我的代码更快,我得到了很多If-else和if-or。我知道如果你有超过5个if / case,那么switch case会更快。那么if-elseif-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
}

OR

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 个答案:

答案 0 :(得分:1)

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

请参阅此链接,您将找到两种不同的比较

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

答案 1 :(得分:0)

当我提出这样一个问题时,我的理念是:你写的越少越好。

为何选择这样的理念?一个词:可测性。
每次添加一行时,都必须确保其行为已经过测试。我不像switch synthax那样特别,但是当它将行号除以2时,我就把它拿走了。

答案 2 :(得分:0)

我会选择:

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

    case 22:
    ...
}