Примечание: Это относится к более старым версиям VB.net до Visual Studio 2010 и VB.net 10
Разница в том, что в VB.Net лямбда-выражение должно возвращать значение, т. Е. Они должны быть функциями, а не подпрограммами. Лямбда-выражение eventRaised = true
интерпретируется как логическое выражение, а не как присваивание, т. Е. Оценивается как ложное, а не как истинное.
Дополнительные сведения о MSDN .
Я не думаю, что шаблон c # для тестирования событий, использованный в примере, может быть выполнен в VB.Net без введения другой функции, например,
<TestFixture()> _
Public Class Test
<Test()> _
Public Sub EventTest()
Dim eventClass As New EventClass
Dim eventRaised As Boolean = False
AddHandler eventClass.AnEvent, Function() (SetValueToTrue(eventRaised))
eventClass.RaiseIt()
Assert.IsTrue(eventRaised)
End Sub
Private Function SetValueToTrue(ByRef value As Boolean) As Boolean
value = True
Return True
End Function
End Class
Public Class EventClass
Public Event AnEvent()
Public Sub RaiseIt()
RaiseEvent AnEvent()
End Sub
End Class