Сегодня я наблюдал очень странное поведение в VB.NET.Код, о котором я говорю, следующий:
Option Strict On
Option Explicit On
Module Module1
Sub Main()
Dim thisShouldBeSet = False
DoSomething(Function() thisShouldBeSet = True)
If Not thisShouldBeSet Then
Throw New Exception()
End If
Console.WriteLine("yaay")
End Sub
Sub DoSomething(action As Action)
action.Invoke()
End Sub
End Module
Я знаю, что код сам по себе имеет недостатки, потому что я должен использовать:
DoSomething(Sub() thisShouldBeSet = True)
Вместо:
DoSomething(Function() thisShouldBeSet = True)
Но я нахожу очень странным, что даже при Option Strict и Option Explicit On компиляция позволяет мне скомпилировать этот код.
Что еще более странно, так это то, что при выполнении кода действие фактически ведет себя как Func (логического).
Может кто-нибудь дать мне правильное объяснение, почему это разрешено в VB.СЕТЬ?Это ошибка компилятора / времени выполнения?