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

时间:2017-01-12 22:48:13

标签: c# vb.net c#-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)))));

BTW,HubProxy对象是SignalR中心。

谢谢, kayaking_jeff

2 个答案:

答案 0 :(得分:1)

我对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函数附加到RichText框中的Invoke事件的名称和消息(可能是为了确保在相应的线程上修改UI元素?)

无论如何,希望这可以帮助你解析这条线。通过&gt;。&lt;

,无法帮助您进行转换

(如果我说错了,请告诉我,我会删除或调整有问题的陈述)

答案 1 :(得分:0)

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的答案。