将 C# Lambda 表达式转换为 VB.net

Converting C# Lambda expression to VB.net

我正在尝试将一些 C# 代码转换为 VB.Net。我想我在这里处理的是 lambda 表达式,但我不确定如何转换它。我是 C# 的新手,这比免费的在线转换器可以处理的要高级一些。

将代码转换为 VB.net 对我来说会很棒,但我真正想要的是有人解释这段代码试图做什么(教人钓鱼等等...... )

HubProxy.On<string, string>("AddMessage", (name, message) => 
                this.Invoke((Action)(() => 
                    RichTextBoxConsole.AppendText(String.Format    ("{0}: {1}" + Environment.NewLine, name, message)))));

顺便说一句,HubProxy 对象是一个 SignalR 集线器。

谢谢, kayaking_jeff

我对 SignalR 不是特别熟悉,但它看起来是这样的,从内到外工作

String.Format("{0}: {1}" + Environment.NewLine, name, message)

将变量替换为字符串。 name 将代替 {0},message 将代替 {1}。这与 new String(name + ": " + message + Environment.NewLine)

相同
RichTextBoxConsole.AppendText(String.Format(...))

将格式化的字符串追加到 RichTextBox 中

(Action)(() => RichTextBoxConsole.AppendText(...))

声明一个不带参数的 lambda 表达式并调用 AppendText 函数。

(name, message) => this.Invoke((Action)(...))

声明第二个 lambda 函数,采用 2 个参数(namemessage)并使用前面的 lambda 表达式调用 Invoke 函数。我假设 Invoke 会实际执行 lambda 表达式。

HubProxy.On<string, string>("AddMessage", (name, message) => ...);

同样,不熟悉 SignalR,但我有根据的猜测是,这是将先前的 lambda 表达式附加到 AddMessage 事件,这样每当 AddMessage 发生时,您的 lambda 函数就会执行,导致 AddMessage 事件的名称和消息通过 Invoke 函数附加到 RichText 框中(也许是为了确保 UI 元素在适当的线程上被修改?)

无论如何,希望这能帮助您解析该行。虽然无法帮助您转换 >.<

(如果我说错了,请告诉我,我会删除或调整违规的言论)

VB 等价于:

HubProxy.On(Of String, String)("AddMessage", Function(name, message) _
    Me.Invoke(CType(Sub() _
    RichTextBoxConsole.AppendText(String.Format("{0}: {1}" & Environment.NewLine, name, message)), Action)))

有关逻辑的解释,请参阅 Tyler 的回答。