加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

当函数没有返回时,VB.NET中没有警告

发布时间:2020-12-17 00:05:46 所属栏目:大数据 来源:网络整理
导读:关于警告的 Some comments on StackOverflow question Why doesn’t the C# compiler stop properties from referring to themselves? 让我想到了当我编写更多VB.NET代码时总是困扰我的旧问题. 其中之一是,如果您声明了一个Function但编译器没有发出警告,但
关于警告的 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读