2014-05-07 59 views
2

在閱讀NSubstitute教程時,我將用C#編寫的示例轉換爲VB.net以瞭解功能,但我需要您對這些(無關)語句的支持,儘管採取了所有護理噸轉換:將包括NSubstitute代碼在內的C#語句轉換爲VB.net

1.

calculator().Received().Add(1, Arg.Is(Of Integer)(function(x) new[] {-2,-5,-10}.Contains(x))) 

2.

注:foo是從一個接口派生對象,具有所謂的 「的SayHello」

空隙方法
foo.When(x >= x.SayHello("World")).Do(x => counter++); 

3.

calculator().When(x >= x.Add(-2, -2)).Do(x => { throw new Exception(); }); 

注:發動機是從該接口派生對象:

public interface IEngine { 
    event EventHandler Idling; 
    event EventHandler<LowFuelWarningEventArgs> LowFuelWarning; 
    event Action<int> RevvedAt; 
} 

4.

engine.Idling += (sender, args) => wasCalled = true; 

5.

engine.Idling += Raise.EventWith(new object(), new EventArgs()); 

6.

engine.RevvedAt += rpm => revvedAt = rpm; 

有了你們的支持,我希望,我能剩下的語句轉換我自己。

預先感謝您

邁克爾

+2

嘗試把你的類:http://converter.telerik.com/ – JMan

+0

吉榮,感謝 - 我知道這個轉換器(和其他人),但他們無法幫助我在所有情況下。 –

回答

2

看來你要轉換LAMBDA的和添加事件處理。

拉姆達從C#

.Where(x => x.Foo = 1) 
.Do(x => x.Bar()) 

轉化爲

.Where(function(x) x.Foo = 1) 
.Do(sub(x) x.Bar()) 

在VB.Net,你必須考慮到,如果Labda實際上是執行相應的功能或子和代碼它。在C#中

engine.Idling += MyEventHandler 

添加事件VB.Net

AddHandler engine.Idling, AddressOf MyEventHandler 

VB.Net讓ü添加事件這樣的。刪除事件是由關鍵字RemoveHandler

1

做要添加到吉榮的回答,添加事件處理程序的一般格式爲:

AddHandler someObject.SomeEvent, SomeDelegate 

可以使用AddressOf運算符來創建一個指向一個委託一種有名的方法,但這不是唯一的方法。拉姆達也創建一個委託所以這樣的:

engine.Idling += (sender, args) => wasCalled = true; 

變成這樣:

AddHandler engine.Idling, Sub(sender, args) wasCalled = True 

此外,該行沒有實際添加的事件處理程序:

engine.RevvedAt += rpm => revvedAt = rpm; 

這樣的AddHandler贏得」工作。我從來沒有這樣做自己,但我相信你需要調用Delegate.Combine爲:

engine.RevvedAt = [Delegate].Combine(engine.RevvedAt, Sub(rpm) revvedAt = rpm) 
+0

+1,很好的加入我的答案:) – JMan

+0

謝謝。與Jeroens的答案一起,我能夠轉換幾個語句。當我轉換所有的陳述時,我會標記一個答案 - 在另一種情況下,我要求你多一個支持。 –