Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET的lambda语法和Address之间的差异_Vb.net_Lambda - Fatal编程技术网

VB.NET的lambda语法和Address之间的差异

VB.NET的lambda语法和Address之间的差异,vb.net,lambda,Vb.net,Lambda,我最近进入了VB.NET的快乐世界,但就我的一生而言,我似乎不明白为什么下面的内容不起作用 当我在这里写这段代码时,一切都很好: MyNavigationCommand = New RelayCommand(AddressOf Navigate) Private Sub Navigate() Navigator.NavigateTo(NavigationRoutes.DetailScreen) End Sub 但是,当我尝试使用lambda语法执行完全相同的操作时,当我单击触发命令的

我最近进入了VB.NET的快乐世界,但就我的一生而言,我似乎不明白为什么下面的内容不起作用

当我在这里写这段代码时,一切都很好:

MyNavigationCommand = New RelayCommand(AddressOf Navigate)

Private Sub Navigate()
    Navigator.NavigateTo(NavigationRoutes.DetailScreen)
End Sub
但是,当我尝试使用lambda语法执行完全相同的操作时,当我单击触发命令的按钮时,lambda中的代码没有被命中

以下行无效:

MyNavigationCommand = New RelayCommand(Sub() Navigator.NavigateTo(NavigationRoutes.DetailScreen))

这应该和我以前的方法完全一样,不是吗?还是我遗漏了什么

我不确定你到底出了什么问题。这是我为测试这一点而编写的代码:

Sub Main

    Dim MyNavigationCommand = New RelayCommand(AddressOf Navigate)
    Dim MyNavigationCommand2 = New RelayCommand(Sub() Console.WriteLine("!"))

    Navigate
    MyNavigationCommand
    MyNavigationCommand2

End Sub

Public Delegate Sub RelayCommand

Public Sub Navigate()
    Console.WriteLine("!")
End Sub

当运行此代码时,将生成三行

是Navigator.Navigate指向共享子节点还是依赖于某些属性?NavigateTo实际上是做什么的?就像你说的,它在做这么简单的事情时起作用。但是,当您将闭包传递给RelayCommand的操作时,它将不再工作。我已经解决了这个问题,它与MVVM Light的RelayCommand如何处理传递给命令的lambda中捕获的变量有关。我自己实现ICommand并传递一个捕获的变量就可以做到这一点。太奇怪了。@Mirage-你能解释一下你在哪里结束了吗?我看不出
Sub()Console.WriteLine(!”
Sub()Navigator.NavigateTo(NavigationRoutes.DetailScreen)
之间有什么区别。除非
NavigationRoutes.DetailScreen
不仅仅是常规类型?