C#中foreach及List.ForEach()方法的区别

文章目录

    • 前言
    • 差别
  • 原因
    • return在两种方法中应用的区别
    • 结束语

前言

之前一直觉得C#中foreach循环和集合的ForEach()这个循环方法是没有什么区别,只是写法不同,但是在我最近的使用中,发现ForEach()方法还是和foreach循环存在一些区别的,今天在这里记录下;

差别

众所周知 在C#和java中具有三个神奇的关键字 return; continue和break;而这三个的区别在这都不讲了,之所以要说这三个关键字 就是因为在使用ForEach()的时候这个方法居然只支持return 这个关键字,而不支持continue和break; 而且在ForEach()方法里面当你使用return的时候并不是返回,而是类似于continue 终止当前循环,执行集合中的下一个元素,而当我F12查看ForEach()方法的时候才发现了一个我一直忽略的事情,那就是委托;

原因

其实原因很简单,List.ForEach()方法的参数是一个Action的委托,而 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)
				  {
				  return;
				  }
		  }

return在两种方法中应用的区别

	所以,看到这里,我们应该可以看出,两种方法的不同了,所以 return 在这两种方法里面所展现的区别就显而易见了!
	0.在 foreach() 里,return 所起到的作用是 是跳出整个方法,也就是 当你在 foreach()里面使用 return的时候,
他就会跳出 foreach 所在的整个方法,从而直接结束该方法的运行。
	1.在 Lsit.foreach() 方法里面使用 retrun 的话,我们可以从上面的代码看出,这个方法实际上是运用委托,
在方法里面去运行另外一个方法,换句话说,就是我们用foreach 去循环执行了这个方法,而这个时候我们去使用 return 的话,
它所返回跳出的方法,仅仅是被循环执行的那个方法,也就是委托定义的那个方法,而返回出那个方法以后,循环会认为是该方法已经执行完毕,
从而进行下一次循环,所以,我们在List.foreach()所执行的return 实际上和在 foreach()里面执行 continue 一样!

结束语

要啥自行车啊!拜拜!

你可能感兴趣的:(C#)