Je crois que le code VB.Net suivant est l'équivalent du code C# en cours; Cependant, le test VB.Net échoue - la gestion des événements Lambda n'est jamais appelée.Comment déclarer les gestionnaires d'événements lambda dans VB.Net?
Que se passe-t-il?
Version VB.Net - échoue:
<TestFixture()> _
Public Class TestClass
<Test()> _
Public Sub EventTest()
Dim eventClass As New EventClass
Dim eventRaised As Boolean = False
AddHandler eventClass.AnEvent, Function() (eventRaised = True)
eventClass.RaiseIt()
Assert.IsTrue(eventRaised)
End Sub
End Class
Public Class EventClass
Public Event AnEvent()
Public Sub RaiseIt()
RaiseEvent AnEvent()
End Sub
End Class
C# Version - passe:
[TestFixture]
public class TestClass
{
[Test]
public void EventTest()
{
var eventClass = new EventClass();
var eventRaised = false;
eventClass.AnEvent +=() => { eventRaised = true; };
eventClass.RaiseIt();
Assert.IsTrue(eventRaised);
}
}
public class EventClass
{
public delegate void EventHandler();
public event EventHandler AnEvent;
public void RaiseIt()
{
AnEvent();
}
}
Ils ont vraiment screawed avec lambdas dans VB.Net. – chrissie1
D'accord, il semble qu'ils ont fait le minimum pour obtenir le lien en cours et c'est tout. –
Notez qu'à partir de VS2010, les lambdas VB.Net peuvent maintenant être des sous-programmes et n'ont pas besoin de retourner une valeur. –