为什么迭代变量不能改变?

弼马温 2010-12-11 10:20:17
这样设计有什么好处?
...全文
281 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bourbon1795 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 smoke_1988 的回复:]
foreach(int i in arr){
i++;
}

这句话有语法错误,不能通过编译
[/Quote]
迭代变量是只读的。
flyerwing 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sp1234 的回复:]
编译根本不然通过 --> 编译根本不让foreach迭代变量通过编译
[/Quote]
foreach不能改变内容了
bourbon1795 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sp1234 的回复:]
编译根本不然通过 --> 编译根本不让foreach迭代变量通过编译
[/Quote]
目的不还是为了让迭代变量只读不写吗?只不过方法不同。
csproj 2010-12-20
  • 打赏
  • 举报
回复
因为foreach是迭代器的简写形式。
最后会编译成对迭代器来访问集合的成员

迭代器IEnumerator接口如下:
public interface IEnumerator
{
bool MoveNext();
object Current { get; }
void Reset();
}


因为返回值的Current 属性是只读的,所以无法修改。

不过想不通为什么不设计成object Current { get;set; }
刚看了几个常用的集合源码,Current 明明可以设计成可写的。
估计是为了兼容所有的集合吧,请哪位高人解释下吧




  • 打赏
  • 举报
回复
编译根本不然通过 --> 编译根本不让foreach迭代变量通过编译
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bourbon1795 的回复:]
迭代变量是只读的。
[/Quote]

瞎说。编译根本不然通过,根本谈不上只读还是不只读。
PitTroll 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 smoke_1988 的回复:]
foreach(int i in arr){
i++;
}

这句话有语法错误,不能通过编译
[/Quote]
用for循环不就可以了
弼马温 2010-12-19
  • 打赏
  • 举报
回复
foreach(int i in arr){
i++;
}

这句话有语法错误,不能通过编译
PitTroll 2010-12-19
  • 打赏
  • 举报
回复
不能改变是什么意思?
弼马温 2010-12-19
  • 打赏
  • 举报
回复
比如说,我有一个链表,我要给链表里每一个变量赋初值。用下标的方式不是很讨厌么?
jointan 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 smoke_1988 的回复:]
引用 2 楼 jointan 的回复:

课堂上点名时,允许学生随便出入,这名点的还有意义吗?


比如说点完名了到另一个教室去等待上课!!!!
[/Quote]
那也得先点完吧.
弼马温 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jointan 的回复:]

课堂上点名时,允许学生随便出入,这名点的还有意义吗?
[/Quote]

比如说点完名了到另一个教室去等待上课!!!!
jointan 2010-12-11
  • 打赏
  • 举报
回复
课堂上点名时,允许学生随便出入,这名点的还有意义吗?
一切为了你 2010-12-11
  • 打赏
  • 举报
回复
什么意思

110,533

社区成员

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

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

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