为什么这不是一个结束

本文关键字:一个 结束 这不是 为什么 | 更新日期: 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循环,它在我的脑海中引发了警报。然而,这根本不是一个闭包,因此没有两篇博客文章中概述的缺陷。闭包是完全不同的东西,有一组不同的潜在问题。

这是一个介绍闭包概念的链接。