为什么我们不能指定一个foreach迭代变量,而我们完全可以与访问者进行修改? [英] Why can't we assign a foreach iteration variable, whereas we can completely modify it with an accessor?

查看:895
本文介绍了为什么我们不能指定一个foreach迭代变量,而我们完全可以与访问者进行修改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是好奇这个:以下code将无法编译,因为我们无法修改foreach迭代变量:

I was just curious about this: the following code will not compile, because we cannot modify a foreach iteration variable:

        foreach (var item in MyObjectList)
        {
            item = Value;
        }

但下面将编译和运行:

But the following will compile and run:

        foreach (var item in MyObjectList)
        {
            item.Value = Value;
        }

为什么是第一个无效的,而第二个可以做同样的下方(我正在寻找正确的英语前pression这一点,但我不记得了。根据...?^^)

Why is the first invalid, whereas the second can do the same underneath (I was searching for the correct english expression for this, but I don't remember it. Under the...? ^^ )

推荐答案

的foreach是一个只读迭代器,迭代动态地实现IEnumerable的类,在的foreach每次循环调用了IEnumerable获得下一个项目,你有产品只读参考,不能重新分配它,而只是调用 item.Value 正在访问并赋予一定的参考价值读/写属性的,但仍参考项的只读参考。

foreach is a read only iterator that iterates dynamically classes that implement IEnumerable, each cycle in foreach will call the IEnumerable to get the next item, the item you have is a read only reference, you can not re-assign it, but simply calling item.Value is accessing it and assigning some value to a read/write attribute yet still the reference of item a read only reference.

这篇关于为什么我们不能指定一个foreach迭代变量,而我们完全可以与访问者进行修改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆