C#中foreach及List.ForEach()方法的區別

前言

之前一直覺得C#中foreach循環和集合的ForEach()這個循環方法是沒有什麼區別,只是寫法不同,但是在我最近的使用中,發現ForEach()方法還是和foreach循環存在一些區別的,今天在這裏記錄下;

差別

衆所周知 在C#和java中具有三個神奇的關鍵字 return; continue和break;而這三個的區別在這都不講了,之所以要說這三個關鍵字 就是因爲在使用ForEach()的時候這個方法居然只支持return 這個關鍵字,而不支持continue和break; 而且在ForEach()方法裏面當你使用return的時候並不是返回,而是類似於continue 終止當前循環,執行集合中的下一個元素,而當我F12查看ForEach()方法的時候才發現了一個我一直忽略的事情,那就是委託;

原因

其實原因很簡單,List<T>.ForEach()方法的參數是一個Action<T>的委託,而 Action委託是沒有返回值的,所以當我們在使用ForEach()方法的時候可以理解爲每次循環都在調用一個void方法,而當我們再循環的方法裏使用return 的時候其實就是直接結束掉這個方法,執行集合中的下一個元素;而foreach循環說到底是寫在方法內部的一個循環體,所以當我們調用return的時候也是直接結束掉了循環體所在的方法;
下面的代碼可能更方便理解

		 List<int> a = new List<int> { 1, 2, 3 };
         a.ForEach(item =>
          {
               if(item=1)
               {
               return;
               }
          });
         //上面的代碼相當於下面這樣一個實現
	     foreach(int item in a)
	     {
			test(item)
	     }

		   void test(int item)
		   {
				  if(item=1)
				  {
				  retrun ;
				  }
		  }

結束語

要啥自行車啊!拜拜!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章