泛型的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
这里传递给方法的是p的副本(对于引用类型,是其引用地址的副本),所以对其赋值不影响原值。
至于foreach块内不能给p赋值,参照foreach的运行原理(IEnumerable接口)
/content/3999242.html
http://topic.csdn.net/u/20110702/23/ab1ddfaf-0576-409f-aed5-b24ab10046e6.html
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
相关文章推荐
- 在ASP中,直接使用“Insert into” 语句与使用ADO中AddNew方法有什么区别?哪一种更好呢?
- jq方法each、forEach和map的区别
- JS中map、forEach、filter、reduce等Array新增方法的区别
- JS的forEach和map方法的区别,还有一个$.each
- JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别 Statement 接口提供了三种执行 SQL 语句的方法:
- php循环语句 for()与foreach()用法区别介绍
- for循环中的++i,和方法语句中的i++的区别
- php循环语句 for()与foreach()用法区别介绍
- C#使用foreach语句遍历集合类型的方法
- Java方法中加泛型与不加区别
- C#使用foreach语句遍历队列(Queue)的方法
- JAVA集合的区别,常用的方法、遍历、迭代器、泛型
- php循环语句 for()与foreach()用法区别介绍
- Smarty模板引擎的foreach循环语句结构中的iteration和total的区别
- 泛型类和泛型方法,区别
- php循环语句 for()与foreach()用法区别介绍
- List<T>的ForEach方法(可以使用“语句lambda”作为其参数),如下例子:
- 1.5.5--1.5.6泛型static方法和类型限界、implement和extends的区别
- C#使用foreach语句遍历堆栈(Stack)的方法
- angular.forEach没有跳出循环语句的解决方法