当前位置:   article > 正文

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

c# case else

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

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

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

  if的代码实现如下:

  1. if (score >= 90)
  2. {
  3. Console.WriteLine("A");
  4. }
  5. if (score >= 80)
  6. {
  7. Console.WriteLine("B");
  8. }
  9. if (score >= 70)
  10. {
  11. Console.WriteLine("C");
  12. }
  13. if (score >= 60)
  14. {
  15. Console.WriteLine("D");
  16. }
  17. if (score < 60)
  18. {
  19. Console.WriteLine("E");
  20. }

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

  1. if (score >= 90)
  2. {
  3. Console.WriteLine("A");
  4. }
  5. else//<90
  6. {
  7. if (score >= 80)
  8. {
  9. Console.WriteLine("B");
  10. }
  11. else//<80
  12. {
  13. if (score >= 70)
  14. {
  15. Console.WriteLine("C");
  16. }
  17. else//<70
  18. {
  19. if (score >= 60)
  20. {
  21. Console.WriteLine("D");
  22. }
  23. else
  24. {
  25. Console.WriteLine("E");
  26. }
  27. }
  28. }
  29. }

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

  1. if (score >= 90)
  2. {
  3. Console.WriteLine("A");
  4. }
  5. else if (score >= 80)
  6. {
  7. Console.WriteLine("B");
  8. }
  9. else if (score >= 70)
  10. {
  11. Console.WriteLine("C");
  12. }
  13. else if (score >= 60)
  14. {
  15. Console.WriteLine("D");
  16. }

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

  我们首先看看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语句中比较字符串常量快。

转载于:https://www.cnblogs.com/lian--ying/p/9386471.html

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/142277
推荐阅读
相关标签
  

闽ICP备14008679号