c# - 将 C# 流式接口转换为 VB.NET 中的代码
问题描述
我有以下 C# 代码,我正在尝试将其转换为 VB.NET。我还想用回调替换“Console.WriteLine”。
我认为并希望我已经设法在某种程度上将其转换:
nInteractorsAgent
.AddInteractorFor(currentWindowBounds, Literals.RootId, 0, currentWindowHandle.ToString(), "MyFirstActivatable")
.WithActivatable()
.HasActivationFocus(id => Console.WriteLine("Id: {0} got activation focus.", id))
.SetTentativeFocusEnabled(true)
.HasTentativeFocus(id => Console.WriteLine("Id: {0} got tentative activation focus.", id))
.WhenFocusChanged((id, hasTentativeFocus, hasActivationFocus) => { })
.LostFocus(id => Console.WriteLine("Id: {0} lost focus.", id))
.WhenActivated(id => Console.WriteLine("Id: {0} activated", id));
我在 VB.NET 中的方法是这样的:
Dim v1 As VirtualInteractor = nInteractorsAgent.AddInteractorFor(currentWindowBounds, Literals.RootId, 0, "0", "MyFirstActivatable").WithActivatable().HasActivationFocus(Sub() HasActivationFocus(v1.Id)).SetTentativeFocusEnabled(True).HasTentativeFocus(Sub() HasTentativeFocus(v1.Id)).WhenFocusChanged(Sub() WhenFocusChanged(v1.Id, False, False)).LostFocus(Sub() LostFocus(v1.Id)).WhenActivated(Sub() WhenActivated(v1.Id))
Public Shared Sub HasActivationFocus(ByVal id As String)
End Sub
Public Shared Sub HasTentativeFocus(ByVal id As String)
End Sub
Public Shared Sub WhenFocusChanged(ByVal id As String, ByVal hasTentativeFocus As Boolean, ByVal hasActivationFocus As Boolean)
End Sub
Public Shared Sub WhenFocusChanged()
End Sub
Public Shared Sub LostFocus(ByVal id As String)
End Sub
Public Shared Sub WhenActivated(ByVal id As String)
End Sub
但是,编译器告诉我有问题
.WhenFocusChanged(Sub() WhenFocusChanged(v1.Id, False, False))
和
.WhenActivated(Sub() WhenActivated(v1.Id))
编译器告诉我没有WhenFocusChanged 的版本。声明如下:
<Extension>
Public Shared Function WhenFocusChanged(behaviors As IEnumerable(Of ActivatableBehavior), action As ActivationFocusChangedCallback) As IEnumerable(Of ActivatableBehavior)
<Extension>
Public Shared Function WhenFocusChanged(behavior As ActivatableBehavior, action As ActivationFocusChangedCallback) As ActivatableBehavior
谁能告诉我我在这里做错了什么以及如何正确做?在这种情况下,除了给定的信息之外,我不知道哪些信息对读者很重要。
谢谢你。
解决方案
这不会像原始代码那样工作。您需要混合使用lambda和delegate。这是 vb.net 中类似内容的快速示例。
Module Module1
Sub Main()
Dim o As New Test
o.DoSomething(Sub(paramName) Console.WriteLine("The id is {0}", paramName))
End Sub
End Module
Class Test
Public Property ID As Integer = 10
Delegate Sub SomeDelegate(ByVal id As Integer)
Public Function DoSomething(ByVal f As SomeDelegate) As Test
f(Me.ID)
Return Me
End Function
End Class
推荐阅读
- python - 如何将python脚本的输出存储在变量中
- c# - 在 C# 中将数组值转换为十六进制
- java - 在 JSP 中填充垂直表
- python - 如何按包含 Python 列表的数据框单元格进行分组?
- javascript - 如何在 VS Code 中禁用特定源的智能感知?
- c# - 使用 NEST api 进行弹性搜索的日期范围搜索返回不适当的结果
- python - Pepper - .bmp 到 .explo
- go - 如何在登录页面中写入用户登录错误
- kubernetes - Azure Devops 错误:“io.k8s.api.core.v1.PodSpec 中的未知字段“imagePullPolicy””
- r - dir.create 和 shinyapps.io 的问题