您的位置:首页 > 其它

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

2011-07-14 23:42 218 查看
泛型的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接口)
/content/3999242.html
http://topic.csdn.net/u/20110702/23/ab1ddfaf-0576-409f-aed5-b24ab10046e6.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: