foreach循环的内部好像不能给迭代的对象赋值啊,为什么?

sangsang28 2013-08-29 09:32:14
我初始化一个数组,然后赋值。下面几行代码会有编译错误:

int[] array = new int[10];
foreach( int i in array )
{
i = 8;
}

报错:error CS1656: Cannot assign to 'i' because it is a 'foreach iteration variable'
如果我修改i的类型为ref int i,那么编译错误就变成了一大堆东西:
error CS1031: Type expected
) expected
Embedded statement cannot be a declaration or labeled statement
; expected
Invalid expression term 'in'
; expected
; expected
Invalid expression term ')'
; expected

这是什么原因呢? 我的代码改怎么修改?

...全文
1174 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧帮主 2014-05-28
  • 打赏
  • 举报
回复
值类型是不允许更改的,引用类型允许。
weizhuangwen 2013-08-29
  • 打赏
  • 举报
回复
微软确实不允许修改迭代出的对象,而某些对象一旦修改,却会结束迭代之后的所有循环。 修改如下:

int[] array = new int[10];
                foreach( int i in array )
                {
                    int a=i;
                    a = 8;
                }
或者改为while循环

int a=0;
while(array.Length>a)
{
a++;
//
int i=array[a];
i=8;//这里的i变量就可以赋值了
//
}
shadowSun88 2013-08-29
  • 打赏
  • 举报
回复
引用 楼主 u011858831 的回复:
我初始化一个数组,然后赋值。下面几行代码会有编译错误:

                int[] array = new int[10];
                foreach( int i in array )
                {
                    i = 8;
                }
报错:error CS1656: Cannot assign to 'i' because it is a 'foreach iteration variable' 如果我修改i的类型为ref int i,那么编译错误就变成了一大堆东西: error CS1031: Type expected ) expected Embedded statement cannot be a declaration or labeled statement ; expected Invalid expression term 'in' ; expected ; expected Invalid expression term ')' ; expected 这是什么原因呢? 我的代码改怎么修改?
这样写不对呀 要么使用foreach 要么使用for循环 foreach (var i in array) { ....//直接i即可获取 } 或者 for(int i=0;i<array.lenth;i++) { ...//array[i]获取 }
syn07471 2013-08-29
  • 打赏
  • 举报
回复
arr[i]=8;
全栈极简 2013-08-29
  • 打赏
  • 举报
回复
“i”是一个“foreach 迭代变量”,无法为它赋值。
dota_371581 2013-08-29
  • 打赏
  • 举报
回复
foreach迭代出的对象只读,如果想赋值用for循环

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧