当函数没有返回时,VB.NET中没有警告
关于警告的
Some comments on StackOverflow question Why doesn’t the C# compiler stop properties from referring to themselves?让我想到了当我编写更多VB.NET代码时总是困扰我的旧问题.
其中之一是,如果您声明了一个Function但编译器没有发出警告,但从未执行过显式的Return语句或分配给Function函数.运行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 我也进入了项目设置并启用了Option Strict和Option Explicit.我还设置了警告配置,以便“没有返回值的函数/运算符”设置为错误. 我编译了项目并且没有警告,并且TestWarning()函数没有错误.这似乎是一个发出警告的好地方,因为它默认为False,你可能只是忘了做一个回报.如果没有return语句,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 如果我在If中有明确的Return,而在Else中没有任何内容,那么也没有警告或错误.它将简单地采用默认值,即使您可能(通过编程风格)有明确的返回.在这种情况下,我显式返回False(这是布尔值的默认值),因此它可能是一个隐藏的错误,我应该在其他地方返回True.
警告只会在默认情况下函数何时返回Nothing时通知您.
如果返回值是引用类型,您将收到警告. 但是你的函数有一个值类型的返回值,那些不能是Nothing.因此,没有警告. 这是因为此函数内的函数名称充当结果变量.您可以通过将值分配给函数名而不是使用Return来返回值.所有变量都使用默认值初始化,包括function-name变量.在C中不是这种情况,因此警告的含义不同. 将其与初始化前使用变量进行比较: Dim x As Integer CallFunction(x) 'No warning,x is implicitly and properly initialized to 0. Dim y as Object CallFunction(y) 'A warning: variable used before a value is assigned to it (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |