将包含NSSubstitute代码的C#语句转换为VB.net
在阅读NSubstitute教程时,我将用C#编写的示例转换为VB.net以了解其功能,但我需要您对这些(不相关)语句的支持,尽管我非常小心,但我无法转换这些语句: 一, 二, 注意:foo是一个派生对象,它来自一个名为“SayHello”的void方法接口 三, 注意:引擎是此接口的派生对象:将包含NSSubstitute代码的C#语句转换为VB.net,c#,vb.net,nsubstitute,C#,Vb.net,Nsubstitute,在阅读NSubstitute教程时,我将用C#编写的示例转换为VB.net以了解其功能,但我需要您对这些(不相关)语句的支持,尽管我非常小心,但我无法转换这些语句: 一, 二, 注意:foo是一个派生对象,它来自一个名为“SayHello”的void方法接口 三, 注意:引擎是此接口的派生对象: public interface IEngine { event EventHandler Idling; event EventHandler<LowFuelWarningEve
public interface IEngine {
event EventHandler Idling;
event EventHandler<LowFuelWarningEventArgs> LowFuelWarning;
event Action<int> RevvedAt;
}
五,
六,
我希望在你的支持下,我能够自己转换剩下的语句
先谢谢你
Michael您似乎想要转换Lambda并添加事件处理程序 兰姆达来自c# 转化为
.Where(function(x) x.Foo = 1)
.Do(sub(x) x.Bar())
在VB.Net中,您必须考虑Labda是否实际执行某个函数或子函数,并对其进行相应的编码
在c中添加事件#
在VB.Net中
AddHandler engine.Idling, AddressOf MyEventHandler
VB.Net
允许您像这样添加事件。通过关键字RemoveHandler
删除事件要添加到Jeroen的答案中,添加事件处理程序的一般格式为:
您可以使用AddressOf
操作符创建引用命名方法的委托,但这不是唯一的方法。Lambda还会创建一个委托,因此:
engine.Idling += (sender, args) => wasCalled = true;
变成这样:
此外,此行实际上并没有添加事件处理程序:
engine.RevvedAt += rpm => revvedAt = rpm;
所以AddHandler不起作用。我从未亲自做过,但我相信您需要调用委托。为此,请将组合起来:
试着把你的班级放进去:Jeroen,谢谢-我知道这个转换器(和其他的),但他们不能在所有情况下都帮我。谢谢。再加上杰罗恩斯的回答,我又转换了几句话。当我转换完所有语句后,我将标记一个答案——在另一种情况下,我要求您再提供一个支持。
engine.Idling += Raise.EventWith(new object(), new EventArgs());
engine.RevvedAt += rpm => revvedAt = rpm;
.Where(x => x.Foo = 1)
.Do(x => x.Bar())
.Where(function(x) x.Foo = 1)
.Do(sub(x) x.Bar())
engine.Idling += MyEventHandler
AddHandler engine.Idling, AddressOf MyEventHandler
AddHandler someObject.SomeEvent, SomeDelegate
engine.Idling += (sender, args) => wasCalled = true;
AddHandler engine.Idling, Sub(sender, args) wasCalled = True
engine.RevvedAt += rpm => revvedAt = rpm;
engine.RevvedAt = [Delegate].Combine(engine.RevvedAt, Sub(rpm) revvedAt = rpm)