自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

談C#中循環(huán)結(jié)構(gòu)的效率問(wèn)題

開(kāi)發(fā) 后端
循環(huán)結(jié)構(gòu)是所有程序語(yǔ)言中都有的,本文主要介紹的是循環(huán)結(jié)構(gòu)的效率問(wèn)題。希望會(huì)對(duì)你有幫助,一起來(lái)看。

順序、選擇、循環(huán)是一切程序的三大結(jié)構(gòu)。今天我們就來(lái)說(shuō)一說(shuō)C#循環(huán)結(jié)構(gòu)的一個(gè)小問(wèn)題。

c#的循環(huán)結(jié)構(gòu)有四種:

  • for
  • while…do…
  • do…while…
  • foreach

在這四種結(jié)構(gòu)中,都有循環(huán)結(jié)束的判斷。大于某個(gè)數(shù)字,小于某個(gè)數(shù)字,或者是其他條件表達(dá)式的判斷。今天我們就說(shuō)一下關(guān)于數(shù)字的判斷。

我們的數(shù)字可能存放在定義好的一個(gè)變量中,也可能從是某個(gè)集合的長(zhǎng)度,也可能是某個(gè)方法返回的信息。這里就討論一下某個(gè)方法的返回信息。

假定存在下面的一個(gè)方法,返回值是一個(gè)List<int>

  1. static List<int> GetIntList()   
  2. {   
  3. Console.WriteLine("第 {0} 進(jìn)入GetIntList方法",Counter);   
  4. Counter++;   
  5. return new List<int>(){   
  6. 1,2,3,4,5};   
  7. }  

需要對(duì)這個(gè)方法的返回結(jié)果進(jìn)行循環(huán)處理,剛開(kāi)始大多數(shù)都會(huì)這么寫(xiě),以for循環(huán)為例。

  1. for (int i = 0; i < GetIntList().Count; i++)   
  2. {   
  3. }  

后來(lái)知道的多了一些,或者是聽(tīng)到別人說(shuō),經(jīng)過(guò)自己的驗(yàn)證。發(fā)現(xiàn)這個(gè)循環(huán)判斷條件有問(wèn)題,每次判斷都會(huì)重新調(diào)用GetIntList方法,造成極大地浪費(fèi)。就會(huì)修改成下面的樣子。

  1. int len=GetIntList().Count;   
  2. for (int i = 0; i < len; i++)   
  3. {   
  4. }  

先定義一個(gè)變量,保存集合的長(zhǎng)度。

經(jīng)過(guò)驗(yàn)證,while…do、do…while也存在類似的問(wèn)題,也需要注意。

有時(shí)候我們需要做的就是對(duì)集合里面的每個(gè)元素進(jìn)行處理,我們會(huì)選用foreach這個(gè)便利的循環(huán)結(jié)構(gòu),因?yàn)樗挥每紤]下標(biāo)越界的問(wèn)題。從上面的驗(yàn)證結(jié)果看,就會(huì)有人說(shuō)下面的代碼有問(wèn)題。

  1. foreach (int i in GetIntList())   
  2. {   
  3. }  

到底有沒(méi)有問(wèn)題呢?需要驗(yàn)證。

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Linq;   
  4. using System.Text;   
  5. using System.Data.Common;   
  6. using System.Configuration;   
  7. using MongoDB.Driver;   
  8. using AutoTest.ServiceLocator;   
  9. using System.Reflection;   
  10. using AutoTest.Common;   
  11. namespace AutoTest   
  12. {   
  13. class Program   
  14. {   
  15. static void Main(string[] args)   
  16. {   
  17. Console.WriteLine("------------------------------Begin------------------------------");   
  18. Console.WriteLine("Foreach循環(huán)");   
  19. Counter = 1;   
  20. foreach (int i in GetIntList())   
  21. {   
  22. }   
  23. Console.WriteLine("For循環(huán)");   
  24. Counter = 1;   
  25. for (int i = 0; i < GetIntList().Count; i++)   
  26. {   
  27. }   
  28. Console.WriteLine("do...while...循環(huán)");   
  29. Counter =1;   
  30. int num=0;   
  31. do   
  32. {   
  33. num++;   
  34. }   
  35. while (num < GetIntList().Count );   
  36. Console.WriteLine("while...do...循環(huán)");   
  37. Counter = 1;   
  38. num=0;   
  39. while (num < GetIntList().Count)   
  40. {   
  41. num++;   
  42. };   
  43. Console.WriteLine("------------------------------End------------------------------");   
  44. Console.ReadKey();   
  45. }   
  46. static int Counter=1;   
  47. static List<int> GetIntList()   
  48. {   
  49. Console.WriteLine("第 {0} 進(jìn)入GetIntList方法",Counter);   
  50. Counter++;   
  51. return new List<int>(){   
  52. 1,2,3,4,5};   
  53. }   
  54. }   
  55. }  

其實(shí)經(jīng)過(guò)驗(yàn)證,發(fā)現(xiàn),foreach不同于其他三個(gè)循環(huán)結(jié)構(gòu),是不會(huì)發(fā)生重復(fù)的GetIntList方法調(diào)用的。

結(jié)論

1、foreach和其他三個(gè)循環(huán)結(jié)構(gòu)不太一樣。

2、需要用事實(shí)說(shuō)話。

【編輯推薦】

  1. c#.net實(shí)體類序列化方法
  2. 淺析C#插件式程序開(kāi)發(fā)經(jīng)驗(yàn)
  3. 深入C# 序列化(Serialize)、反序列化(Deserialize)
  4. 用C#實(shí)現(xiàn)文件夾拷貝
  5. C#中的閉包是怎么捕獲變量的
責(zé)任編輯:于鐵 來(lái)源: 博客園
相關(guān)推薦

2009-02-05 15:32:23

接口委托

2009-08-28 17:18:55

foreach循環(huán)

2011-09-21 10:56:31

C#結(jié)構(gòu)

2009-08-24 16:11:35

C#項(xiàng)目開(kāi)發(fā)

2009-08-28 16:37:32

C# for循環(huán)

2009-08-27 16:18:47

C#類C#結(jié)構(gòu)體

2010-08-26 10:41:45

C#內(nèi)部類

2025-01-09 08:01:26

2009-06-24 17:32:40

動(dòng)態(tài)加載AppDoma

2009-08-07 11:26:53

C#數(shù)組結(jié)構(gòu)

2009-08-13 11:18:50

C#結(jié)構(gòu)體

2009-08-13 14:46:03

C#結(jié)構(gòu)體定義

2009-08-14 11:05:28

C#語(yǔ)言的結(jié)構(gòu)體

2009-08-17 15:52:42

C#多態(tài)

2009-08-20 15:26:42

C#循環(huán)語(yǔ)句

2010-07-12 09:07:30

C#

2009-09-08 15:28:24

C#委托

2009-08-21 17:24:18

C#控制攝像頭

2011-06-14 12:27:38

C#C++

2009-06-24 09:52:21

哈希表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)