首页 > 解决方案 > lambda 表达式中的子声明不起作用

问题描述

我尝试从http://www.informit.com/articles/article.aspx?p=2429291&seqNum=8运行以下示例

Private progress As Progress(Of Integer)
Private counter As Integer = 0

Sub Main()
    Try
        progress = New Progress(Of Integer)
        AddHandler progress.ProgressChanged, Sub(sender, e)
                                                 Console.
                                                 WriteLine _
                                                 ("Download progress: " & _
                                                 CStr(e))
                                             End Sub

        DownloadAllFeedsAsync(progress)

    Catch ex As Exception
        Console.WriteLine(ex.Message)
    Finally
        Console.ReadLine()
    End Try
End Sub

我的问题是,编译器不接受以下行:

AddHandler progress.ProgressChanged, Sub(sender, e)
                                                     Console.WriteLine("Download progress: " & CStr(e))
                                                 End Sub

sender和似乎有问题e

错误消息如下:

Lambda 参数“发送者”隐藏了一个包含块中的变量。

有人知道这个问题吗?

标签: vb.netlambda

解决方案


正如我在对问题的评论中提到的那样:我已经检查了 VS: 2012 和 2017 上的相关代码,并且编译时没有错误。

至于您的错误消息,请检查以下内容:Lambda parameter '' hides a variable in an enclosure block、先前定义的范围变量或查询表达式中隐式声明的变量

最重要的是:

纠正这个错误

Ensure that all variables in your lambda expression have unique 
names that do not duplicate existing variable names in the same scope.

根据您的评论:

在链接的示例中,只有一个Sub Main(),而在我的示例中,我有Form1_Load(Sender As Object, e as Eventargs)

因此,变量:sendere存在于同一范围内。现在,您知道如何解决您的问题了 ;)


推荐阅读