为什么这不是一个结束
本文关键字:一个 结束 这不是 为什么 | 更新日期: 2023-09-27 18:08:35
前几天我读了以下两篇博客文章:
在JavaScript中关闭循环变量和在c#中一样有害,并且修复 更麻烦。Eric Lippert, 关闭被认为有害的循环变量
这两篇文章的基本总结是,关闭循环变量,而不是循环值,是c#和JavaScript的一个语言特性,它令人困惑,并可能导致重大和令人困惑的错误。
考虑到这一点,我今天正在阅读一些MSDN关于泛型使用的文档,我遇到了一些让我非常困惑的代码。下面是代码:
class TestGenericList
{
static void Main()
{
// int is the type argument
GenericList<int> list = new GenericList<int>();
for (int x = 0; x < 10; x++)
{
list.AddHead(x);
}
foreach (int i in list)
{
System.Console.Write(i + " ");
}
}
}
这段代码表面上与链接的博客文章中的代码相似。显然这个代码输出的是{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
而不是{10, 10, 10, 10, 10, 10, 10, 10, 10}
。谁能向我解释一下为什么这段代码不是闭包?
我的困惑和由此产生的问题主要与我不理解闭包有关。
代码清单之间的唯一连接是for
循环,它在我的脑海中引发了警报。然而,这根本不是一个闭包,因此没有两篇博客文章中概述的缺陷。闭包是完全不同的东西,有一组不同的潜在问题。
这是一个介绍闭包概念的链接。