gpt4 book ai didi

VB.NET 简化 Action (Of T)

转载 作者:行者123 更新时间:2023-12-04 05:14:04 32 4
gpt4 key购买 nike

我正在使用 VB.Net 4 并成功使用具有以下签名的类:

Sub Register(Of TMessage)(recipient As Object, action As System.Action(Of TMessage))



我想了解 VB 中的 lambda,所以我想看看是否可以简化我当前的代码。

当前:我在类的构造函数中有以下内容(为清楚起见进行了简化)
Public Sub New()
Dim myAction As New Action(Of String)(AddressOf HandleMessage)
Messenger.Default.Register(Of [String])(Me, myAction)
End Sub

后来在类里面我有以下内容:
Private Function HandleMessage(sMsg As String)
If sMsg = "String Value" Then
If Me._Selection.HasChanges Or Me._Selection.HasErrors Then
Return True
End If
Return False
Else
Return False
End If
End Function

问题:有没有办法将其简化为像 C# 中的 lambda,我不必在构造函数中声明 MyAction 变量,只需将字符串值传递给 HandleMessage 函数“ 内联 ”注册子? (我希望这是有道理的)

最佳答案

所以你的构造函数代码相当于:

Messenger.[Default].Register(Of String)(Me,
Function(sMsg)
If sMsg = "String Value" Then
If Me._Selection.HasChanges Or Me._Selection.HasErrors Then
Return True
End If
Return False
Else
Return False
End If
End Function)

值得一提的是,尽管您不需要使用 lambdas 来摆脱显式委托(delegate)创建。这也是完全合法的:
Messenger.[Default].Register(Of String)(Me, AddressOf HandleMessage)

尽管您的示例有些奇怪:您已将 Register 方法声明为采用 Action(Of TMessage)这意味着传递的函数不需要返回值。但是,您的函数返回 Boolean .这里的 Visual Basic 正在做花哨的“委托(delegate)放松”,并丢弃了返回值。所以你所有的 Return True/ Return False bits 实际上并没有做任何特别的事情。

关于VB.NET 简化 Action (Of T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14516318/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com