Нет предупреждения в VB.NET, когда функция не возвращает

Некоторые комментарии по вопросу переполнения стекаПочему компилятор C # не мешает свойствам ссылаться на себя? Что касается предупреждений, это заставило меня задуматься о старых проблемах, которые всегда приводили меня в замешательство, когда я писал больше кода на VB.NET.

Одним из них был тот факт, что компилятор не предупреждал, если вы объявили функцию, но никогда не делал явного оператора Return или присваивал имя функции. Запустив Visual Studio 2008, я только что сделал небольшой экспериментальный проект, и кажется, что поведение никогда не было исправлено. Я создал консольное приложение Visual Basic со следующим кодом:

Module MainModule

    Sub Main()

        Dim test As Boolean = TestWarning()

    End Sub

    Function TestWarning() As Boolean

        Console.WriteLine("There is no Return Statement")

    End Function

End Module

Я также зашел в настройки проекта и повернулOn Option Strict а такжеOption Explicit, Я также установил конфигурации предупреждений таким образом, чтобы для «Функция / Оператор без возвращаемого значения» было установлено значение «Ошибка».

Я скомпилировал проект и не получил ни предупреждения, ни ошибки в функции TestWarning (). Похоже, это отличное место для размещения предупреждения, поскольку по умолчанию используется значение False, и вы, возможно, просто забыли сделать возврат. C # будет ошибка без оператора возврата. Я думал, что VB.NET сделал то же самое с конфигурацией «Функция / Оператор без возвращаемого значения». Это ошибка, или мне чего-то не хватает?

Дальнейшие эксперименты
Function TestWarning() As Boolean

    If DateTime.Now.DayOfWeek = DayOfWeek.Monday Then
        Return False
    Else
        Console.WriteLine("There is no Return Statement")
    End If

End Function

Если у меня есть явноеReturn вIfи ничего вElseТакже нет предупреждения или ошибки. Он просто примет значение по умолчанию, даже если вы, вероятно, намеревались (через стиль программирования) получить явный возврат. В этом случае я явно вернулсяFalse (это значение по умолчанию для Boolean), так что это скорее всего скрытая ошибка, которую я должен был вернутьTrue вElse.

Ответы на вопрос(5)

Ваш ответ на вопрос