任何人都可以向我解释为什么在lambda表达式中使用迭代变量是一个坏主意

时间:2012-02-16 07:17:39

标签: c# vb.net lambda

http://msdn.microsoft.com/en-us/library/bb763133.aspx

Module Module1
    Sub Main()
        Dim array1 As Func(Of Integer)() = New Func(Of Integer)(4) {}

        For i As Integer = 0 To 4
            array1(i) = Function() i
        Next

        For Each funcElement In array1
            System.Console.WriteLine(funcElement())
        Next

    End Sub
End Module

它表示结果总是5,即i的最终值。怎么样?

他们没有将迭代变量放在“闭包”中吗?

1 个答案:

答案 0 :(得分:4)

出现此问题是因为lambda表达式在构造时不会执行,而是在调用它们时执行。

请参阅以下链接: http://blogs.msdn.com/b/vbteam/archive/2007/07/26/closures-in-vb-part-5-looping.aspx

希望它有所帮助。