日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
談C#中循環(huán)結(jié)構(gòu)的效率問題

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

到底有沒有問題呢?需要驗(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 GetIntList()   
  48. {   
  49. Console.WriteLine("第 {0} 進(jìn)入GetIntList方法",Counter);   
  50. Counter++;   
  51. return new List(){   
  52. 1,2,3,4,5};   
  53. }   
  54. }   
  55. }  

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

結(jié)論

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

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

【編輯推薦】

  1. c#.net實(shí)體類序列化方法
  2. 淺析C#插件式程序開發(fā)經(jīng)驗(yàn)
  3. 深入C# 序列化(Serialize)、反序列化(Deserialize)
  4. 用C#實(shí)現(xiàn)文件夾拷貝
  5. C#中的閉包是怎么捕獲變量的

文章標(biāo)題:談C#中循環(huán)結(jié)構(gòu)的效率問題
文章起源:http://www.5511xx.com/article/dpcpjdh.html