Некоторые комментарии по вопросу переполнения стека Почему компилятор 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
.