C#5.0中的捕获的闭包(循环变量)

C#5.0中的捕获的闭包(循环变量),第1张

C#5.0中的捕获的闭包(循环变量

这背后的原因是什么?

我将假设您的意思是“为什么

for
循环也没有更改?”

答案是对于

for
循环,现有行为是完全合理的。如果您将
for
循环分成:

  • 初始化器
  • 健康)状况
  • 迭代器
  • 身体

…然后循环大致如下:

{    initializer;    while (condition)    {        body;        iterator;    }}

(当然,

iterator
也要在
continue;
语句的末尾执行。)

初始化部分在 逻辑上 仅发生一次,因此完全逻辑上只有一个“变量实例化”。此外,在循环的每次迭代中都没有自然的变量“初始”值-不用说

for
循环
必须具有初始化器中声明变量,在条件中进行测试并在迭代器中对其进行修改的形式。您希望像这样的循环做什么:

for (int i = 0, j = 10; i < j; i++){    if (someCondition)    {        j++;    }    actions.Add(() => Console.WriteLine(i, j));}

与此相比,有

foreach
其循环 看起来 像你宣布每次迭代一个独立的变量。哎呀,变量是只读的,这使它 更像
是一个在两次迭代之间变化的变量。将
foreach
循环视为在每次迭代中声明一个新的只读变量(其值取自迭代器)非常有意义。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5427598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存