2014-05-07 3 views
2

En lisant le tutoriel NSubstitute je convertis les exemples écrits en C# en VB.net pour comprendre la fonctionnalité, mais j'ai besoin de votre soutien pour ces instructions (non liées), ce que je peux ' t convertir malgré tout le soin apporté:Convertir les instructions C# incluant le code NSubstitute en VB.net

1.

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

2.

note: foo est un objet dérivé d'une interface avec une méthode vide appelée "SayHello"

foo.When(x >= x.SayHello("World")).Do(x => counter++); 

3.

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

Remarque: le moteur est un objet dérivé de cette interface:

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; 

Avec votre soutien, je l'espère, je suis en mesure de convertir les déclarations restantes moi-même.

Nous vous remercions à l'avance

Michael

+2

Essayez de mettre votre classe: http://converter.telerik.com/ – JMan

+0

Jeroen, merci - je sais que ce convertisseur (et d'autres) mais ils ne peuvent pas m'aider dans tous les cas. –

Répondre

2

Il semble que vous voulez convertir des gestionnaires d'événements Lambda et de l'ajout.

Lambda de C#

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

se traduit

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

En VB.Net, vous devez prendre en compte si le Labda exécute en fait une fonction ou d'un sous et le code en conséquence.

événements Ajout dans C#

engine.Idling += MyEventHandler 

dans VB.Net

AddHandler engine.Idling, AddressOf MyEventHandler 

VB.Net u ajouter l'ou permettre événement comme celui-ci. La suppression d'un événement se fait par le mot-clé RemoveHandler

1

Pour ajouter à la réponse de Jeroen, le format général pour ajouter un gestionnaire d'événements est:

AddHandler someObject.SomeEvent, SomeDelegate 

Vous pouvez utiliser l'opérateur AddressOf pour créer un délégué qui fait référence à une méthode nommée mais ce n'est pas le seul moyen.Un Lambda crée également un délégué si ceci:

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

devient ceci:

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

En outre, cette ligne ne fait d'ajouter un gestionnaire d'événements:

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

si AddHandler gagné » t travail. Je ne l'ai jamais fait moi-même, mais je crois que vous devez appeler Delegate.Combine pour que:

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

+1, bien à ma réponse ajouts :) – JMan

+0

merci. Avec la réponse de Jeroens, j'ai pu convertir quelques autres déclarations. Quand je l'ai converti toutes les déclarations, je vais marquer une réponse - dans l'autre cas, je vous demande un plus grand soutien. –