none
C#的if..else()和Switch判断,性能是不是一样的? RRS feed

  • 问题

  • C#的if..else()和Switch判断,性能是不是一样的?


    它们就是语法格式不同?还是说有性能差别?
    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月20日 1:01

答案

  • 以前我认为两者都是差不多的,没有特别在意,去年从同事那了解了一下这方面的知识
    Switch 要高一些, 下面的地址是详细说明,有空时可以参考一下
    知识改变命运,奋斗成就人生!
    • 已标记为答案 dvdvip 2009年4月20日 3:44
    2009年4月20日 1:32
    版主
  • switch的效率要比if...else()的效率高,switch是直接跳转到执行代码,但是在C#中switch的参数只能支持整型、枚举类型和string类型。在判断很多的情况下,应该尽量使用switch语句。
    • 已标记为答案 dvdvip 2009年4月20日 3:44
    2009年4月20日 1:34
  • 你好!
         实际上C#编译器对switch语句的处理相当的智能,会根据你写的具体的switch的行为生成不同的代码以到达最优的性能的!
         具体可以看看刘老师的精彩分析:
    http://www.cnblogs.com/AndersLiu/archive/2008/11/03/csharp-via-il-switch-1.html
    周雪峰
    • 已标记为答案 dvdvip 2009年4月20日 3:44
    2009年4月20日 3:11
    版主
  • switch (this.TextBox1.Text)
    {
        case "A": 
            this.TextBox2.Text = "F1";
            break;
        case "B":
            this.TextBox2.Text = "F2";
            break;
        // ..... 其它
        default:
            this.TextBox2.Text = "F1";
            break;
    }
    遇到问题可以先看看 MSDN 有利于提高自己的自学能力
    知识改变命运,奋斗成就人生!
    • 已标记为答案 dvdvip 2009年4月20日 7:23
    2009年4月20日 4:17
    版主
  • 有些需求不适合使用switch语句的,比如你说的那种分段的情况,只能使用if...else if...else了!
    周雪峰
    • 已标记为答案 dvdvip 2009年4月20日 7:24
    2009年4月20日 4:23
    版主

全部回复

  • 以前我认为两者都是差不多的,没有特别在意,去年从同事那了解了一下这方面的知识
    Switch 要高一些, 下面的地址是详细说明,有空时可以参考一下
    知识改变命运,奋斗成就人生!
    • 已标记为答案 dvdvip 2009年4月20日 3:44
    2009年4月20日 1:32
    版主
  • switch的效率要比if...else()的效率高,switch是直接跳转到执行代码,但是在C#中switch的参数只能支持整型、枚举类型和string类型。在判断很多的情况下,应该尽量使用switch语句。
    • 已标记为答案 dvdvip 2009年4月20日 3:44
    2009年4月20日 1:34
  • 你好!
         实际上C#编译器对switch语句的处理相当的智能,会根据你写的具体的switch的行为生成不同的代码以到达最优的性能的!
         具体可以看看刘老师的精彩分析:
    http://www.cnblogs.com/AndersLiu/archive/2008/11/03/csharp-via-il-switch-1.html
    周雪峰
    • 已标记为答案 dvdvip 2009年4月20日 3:44
    2009年4月20日 3:11
    版主
  • Switch好是好,但是使用起来好像很复杂。我看到的例子,都是什么判断成绩的。例如,超过60分就及格,超过70分就良,超过80分就优。


    这好像没有什么用。只能用来判断数值。



    如果才能正常地把if..else()改成Switch? 例如在Button1的事件里:

    if(this.TextBox1.Text=="A"){this.TextBox2.Text="F1";}
    if(this.TextBox1.Text=="B"){this.TextBox2.Text="F2";}
    if(this.TextBox1.Text=="C"){this.TextBox2.Text="F3";}
    if(this.TextBox1.Text=="D"){this.TextBox2.Text="F4";}
    if(this.TextBox1.Text=="E"){this.TextBox2.Text="F5";}



    怎么变成Switch语句?


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月20日 4:11
  • switch (this.TextBox1.Text)
    {
        case "A": 
            this.TextBox2.Text = "F1";
            break;
        case "B":
            this.TextBox2.Text = "F2";
            break;
        // ..... 其它
        default:
            this.TextBox2.Text = "F1";
            break;
    }
    遇到问题可以先看看 MSDN 有利于提高自己的自学能力
    知识改变命运,奋斗成就人生!
    • 已标记为答案 dvdvip 2009年4月20日 7:23
    2009年4月20日 4:17
    版主
  • 有些需求不适合使用switch语句的,比如你说的那种分段的情况,只能使用if...else if...else了!
    周雪峰
    • 已标记为答案 dvdvip 2009年4月20日 7:24
    2009年4月20日 4:23
    版主
  • private void Form1_KeyDown(object sender,KeyEventArgs e)
    {
     if(e.Control&&e.KeyCode==Keys.D1){this.TextBox2.Text = "F1";}
     if(e.Control&&e.KeyCode==Keys.D2){this.TextBox2.Text = "F2";}
     if(e.Control&&e.KeyCode==Keys.D3){this.TextBox2.Text = "F3";}

    }


    这个应该不行吧?看MSDN也没用。呵呵。
    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月20日 7:26