泛型的Foreach方法与foreach语句的区别

 泛型的Foreach方法与foreach语句的区别?
  List<Person> lst=new List<Person>();
  lst.ForEach(delegate(Person p)
  {
  p = null;//不会报错,但不会改变对象的值
  p = new item();//不会报错,但不会改变对象的值
  });
  lst.ForEach(p => p = new item());//不会报错,但不会改变对象的值
-------------------------------------------------------------------------------------------------------------

  foreach (Person p in lst)
  {
  p = null;//编译不能通过,迭代变量,无法为它赋值
  }


为什么,泛型的Foreach方法可以直接给p赋值,但不报错呢?
这个.ForEach的效果等价于:
C# code
   
   
Action < Person > act = p => p = new item(); foreach (Person p in lst) { act(p); }


这里传递给方法的是p的副本(对于引用类型,是其引用地址的副本),所以对其赋值不影响原值。

至于foreach块内不能给p赋值,参照foreach的运行原理(IEnumerable接口)
http://www.cnblogs.com/xiaopin/archive/2011/01/08/1930535.html

http://topic.youkuaiyun.com/u/20110702/23/ab1ddfaf-0576-409f-aed5-b24ab10046e6.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值