栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么C#foreach语句中的Iteration变量是只读的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么C#foreach语句中的Iteration变量是只读的?

让我们从一个愚蠢但说明性的示例开始:

Object o = 15;o = "apples";

我们从来没有感觉到我们只是将数字15变成了一串苹果。我们知道那

o
仅仅是一个指针。现在,以迭代器形式进行操作。

int[] nums = { 15, 16, 17 };foreach (Object o in nums) {     o = "apples";}

再一次,这真的什么也做不了。或至少编译它 不会 完成任何工作。它当然不会将我们的字符串插入到int数组中-
这是不允许的,而且我们知道这

o
仍然只是一个指针。

让我们举个例子:

foreach (Position Location in Map){     //We want to fudge the position to hide the exact coordinates     Location = Location + Random();     //Compiler Error     Plot(Location);}

如果要进行编译,则

Location
在您的示例中,会突出显示引用中的值
Map
,然后您将其更改为引用一个新值
Position
(由加法运算符隐式创建)。从功能上讲,它等效于此(可以编译):

foreach (Position Location in Map){     //We want to fudge the position to hide the exact coordinates     Position Location2 = Location + Random();     //No more Error     Plot(Location2);}

那么,为什么Microsoft禁止您重新分配用于迭代的指针?一件事很清楚-
您不希望有人指派他们以为他们在循环中已经改变了您的位置。易于实施:变量可能隐藏一些内部逻辑,以指示正在进行的循环状态。

但更重要的是,您没有理由
分配给它。它代表循环序列的当前元素。如果您遵循“编码恐怖”,则为其分配值将违反“单一责任原则”或柯里定律。变量仅意味着一件事。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号