Lambda表达式中的子声明不起作用

时间:2019-02-28 08:36:05

标签: vb.net 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

sendere似乎有问题。

错误消息如下:

Lambda参数“发送器”将变量隐藏在一个“包围区”中。

有人知道这个问题吗?

1 个答案:

答案 0 :(得分:0)

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

关于您的错误消息,请检查以下内容:Lambda parameter '' hides a variable in an enclosing block, a previously defined range variable, or an implicitly declared variable in a query expression

最重要的是:

  

更正此错误

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存在于同一作用域中。现在,您知道该如何解决您的问题了;)