• if、else if 、else及switch...case使用小记(C#)


      有时候编程编的久了,如果不停下来认真思考一下,即便是一些最基础的知识点,也可能让自己懵圈。其实,说到底还是打基础的时候没打牢,或者说自以为是地认为自己懂了,然后在打基础的时候就懒得思考懒得看了,结果就是对这个基础知识点的认识一直停留在自己的固有认识里。

      好了,下面进入正题。if、else if和else是我们经常要用到的基本语法结构。某日,在园子里看到一博客贴出了这样一个问题。

      控制台输入一个成绩,如果 成绩>=90 :输出A,如果90>成绩>=80 输出B,如果80>成绩>=70 输出C ,如果70>成绩>=60 输出D,如果 成绩<60输出E。请思考用if好还是用if-else好还是if else if好,为什么好?

      if的代码实现如下:

    if (score >= 90)
                {
                    Console.WriteLine("A");
                }
                if (score >= 80)
                {
                    Console.WriteLine("B");
                }
                if (score >= 70)
                {
                    Console.WriteLine("C");
                }
                if (score >= 60)
                {
                    Console.WriteLine("D");
                }
                if (score < 60)
                {
                    Console.WriteLine("E");
                } 
    

       if...else的代码实现如下:

    if (score >= 90)
                {
                    Console.WriteLine("A");
                }
                else//<90
                {
                    if (score >= 80)
                    {
                        Console.WriteLine("B");
                    }
                    else//<80
                    {
                        if (score >= 70)
                        {
                            Console.WriteLine("C");
                        }
                        else//<70
                        {
                            if (score >= 60)
                            {
                                Console.WriteLine("D");
                            }
                            else
                            {
                                Console.WriteLine("E");
                            }
                        }
                    }
                } 
    

       if...else if的代码实现如下:

    if (score >= 90)
                {
                    Console.WriteLine("A");
                }
                else if (score >= 80)
                {
                    Console.WriteLine("B");
                }
                else if (score >= 70)
                {
                    Console.WriteLine("C");
                }
                else if (score >= 60)
                {
                    Console.WriteLine("D");
                } 
    

       在公司做开发时,相信有不少人乱用这几个结构。

      我们首先看看if的实现,很明显,各个if语句之间是独立的,无论前面的if语句是否未真,当前if语句均会执行,显然,这种实现效率低下。

      再来看第二种和第三种实现,本质上,这两种实现是等价的,在大多数编程语言实现中,else if都不是作为一种基本的关键字出现的,它实际是else语句和if语句的结合,这种组合构造避免了仅使用if、else时的多重嵌套,就像上面的第二种实现,类似于语法糖,便于程序员敲代码。

      另外,这种情形也可以使用switch...case结构实现。在C#中,当在整型常量上使用switch结构时,CLR总是会将switch翻译为查找表结构,从而使得每个case分支都能获得相同的执行时间,在这种情形下,相比使用if...else结构同时有一个值或者少量的几个值出现的频率明显较高,那么使用if...else结构且将出现频度较高的值排在前面的执行速度比switch结构会更快。

      最后,C#中的switch...case结构还允许使用string常量,这和整型常量稍微不同。它在case标签较少的情况下(大约是6个左右),switch语句将编译成和if语句类似的结构。但是,如果case标签数量足够大(大于6个),那么c#编译器将创建一个HashTable对象,用字符串常量填充它,然后在该表上进行查找,然后跳转。Hashtable查找不是严格意义上的O(1),并且具有显著的常量代价,但是若case标签的数量足够大,它的速度将比在多个if语句中比较字符串常量快。

  • 相关阅读:
    如何获取SQL Server数据库连接字符串的某些部分
    .NET同步原语Barrier简介
    模版引擎RazorEngine简介
    如何使用SQL Server实现SignalR的横向扩展
    SignalR的客户端.NET Client介绍
    一个简单的SignalR例子
    看视频学SignalR—在微软虚拟学院学习SignalR
    看视频学Bootstrap—在微软虚拟学院学习Bootstrap
    C# 窗口与控件的相关操作
    opencv——常见的操作
  • 原文地址:https://www.cnblogs.com/lian--ying/p/9386471.html
Copyright © 2020-2023  润新知