C#中foreach及List<T>.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)
				  {
				  return;
				  }
		  }

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

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

结束语

要啥自行车啊!拜拜!

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值