将 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 个参数(name
和 message
)并使用前面的 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 的回答。
我正在尝试将一些 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 个参数(name
和 message
)并使用前面的 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 的回答。