遍历中不可以对变量进行操作吗

2019-04-13 18:18发布

问题:

foreach(int i in arr){

Console.WriteLine(i);
i=i+5;
}

报错:

Microsoft (R) Visual C# Compiler version 4.0.30319.34209
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

c:\program\bb.cs(9,4): error CS1656: Cannot assign to 'i' because it is a 'foreach iteration variable'

回答1:

foreach使用了枚举器,而枚举器是不能更改底层集合的,但是可以更改集合中的对象引用的任何对象。这里的int是值类型,不能直接修改集合中的值。但是对于引用类型是可以



回答2:

书上是这么说的:不能对变量标识符 i 进行赋值,即使赋值,i 的值也不会改变;而且 foreach 在遍历的时候,他的元素计数和集合项也不能被改变,改动就会报错。

不管是 foreach 还是别的循环,建议在操作变量之前,赋值一个临时变量,然后操作临时变量,避免报错。



标签: c# .net java c++