C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)
2015-04-11 22:05
405 查看
C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译。
如果要让自定义的数据类型支持foreach循环,则该类型必须实现IEnumerable<T>接口,且存在对应此列表的IEnumerator<T>实现。 实际上,在.Net的底层(IL语言层面)而言,
等价于如下代码:
它只是为了让用户更加易于使用的等价描述形式。
foreach (int x in myArray) { x++; //错误代码,因为改变了元素的值 Console.WriteLine(x); }
如果要让自定义的数据类型支持foreach循环,则该类型必须实现IEnumerable<T>接口,且存在对应此列表的IEnumerator<T>实现。 实际上,在.Net的底层(IL语言层面)而言,
foreach (var x in list) // x的类型为T { ... }
等价于如下代码:
using (var iterator = list.GetEnumerator()) // iterator的类型为IEnumerator<T> { while ( iterator.MoveNext() ) { var x = iterator.Current(); ... // 本段代码中禁止修改x的值——编译器会报错 } }
它只是为了让用户更加易于使用的等价描述形式。
相关文章推荐
- C#把一个集合里面的元素循环,放到一个数组中
- 实验心得:C#中当使用foreach对集合进行遍历时,不得改变集合的大小和元素的值
- php的array数组 -------方法foreach循环时候,利用数组里值的引用地址(& )从而改变数组里的值
- 使用foreach循环输出数组中的元素
- C#中foreach List循环操作出现“集合已修改;可能无法执行枚举操作”错误
- 18、C#里面的数组和foreach循环的使用
- foreach循环遍历数组和集合
- foreach 循环不能改变集合中各项的值
- c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)
- 18、C#里面的数组和foreach循环的使用
- Java中foreach和for在循环遍历数组、集合方面的区别
- grep() 查找满足过滤功能数组元素。原始数组不受影响。
- foreach循环在数组和集合中的使用
- C#循环删除集合中的元素
- 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解
- C#使用foreach循环遍历数组完整实例
- 不要在foreach 循环里进行集合元素的 remove/add 操作
- IEnumerable 接口---实现该接口里的成员的类,可以使用foreach循环访问集合
- foreach 循环不能改变集合中各项的值
- C#实现在foreach中删除集合中的元素