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