对于那些现在发现这个问题的人:自Visual Basic 2010(VB 10.0)以来,匿名Sub
s确实有用,所以你可以这样写:
Sub() eventRaised = True
注意:这与Visual Studio 2010和VB.net 10之前的旧版VB.net有关
区别在于,在VB.Net中,lambda表达式必须返回一个值,即它们必须是函数而不是subs.lambda表达式eventRaised = true
被解释为布尔表达式而不是赋值,即评估为false而不是设置为true.
有关MSDN的更多详细信息.
我不认为用于测试示例中的事件的c#模式可以在VB.Net中完成而不引入另一个函数,例如
_
Public Class 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