首页 > 解决方案 > 将 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

谁能告诉我我在这里做错了什么以及如何正确做?在这种情况下,除了给定的信息之外,我不知道哪些信息对读者很重要。

谢谢你。

标签: c#vb.netfluent

解决方案


这不会像原始代码那样工作。您需要混合使用lambdadelegate。这是 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

推荐阅读