gpt4 book ai didi

vb.net - 函数不返回时,VB.NET中没有警告

转载 作者:行者123 更新时间:2023-12-04 13:29:46 26 4
gpt4 key购买 nike

关于警告的Some comments on Stack Overflow 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
我还进入了项目设置,并打开了 On Option StrictOption 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
如果我在 Return中有一个明确的 If,而在 Else中没有任何内容,那么也就没有警告或错误。即使您可能打算(通过编程样式)获得显式的返回值,它也只会采用默认值。在这种情况下,我显式返回了 False(这是 bool 值的默认值),因此很可能是一个隐藏的错误,我应该在 True中返回 Else

最佳答案

该警告只会让您知道何时默认情况下函数将返回Nothing

如果返回值是引用类型,则会收到警告。

但是您的函数具有一个返回值类型的返回值,并且这些返回值不能为Nothing。因此,没有警告。

这是因为该函数内部的函数名称充当结果变量。您可以通过将其赋给函数名称而不是Return来返回一个值。并且所有变量都使用默认值初始化,包括函数名变量。 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

关于vb.net - 函数不返回时,VB.NET中没有警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com