gpt4 book ai didi

vb.net - VB Nullables 和 Nothing

转载 作者:行者123 更新时间:2023-12-04 04:16:49 25 4
gpt4 key购买 nike

我研究了C#default VB.NET 中的关键字等价并遇到 this question .

然后我就好奇了。一些背景知识 - 我正在解析一个 Excel 电子表格,其中许多列可以为空,对于我来说,整数列与 0 之间肯定存在差异。并且是 null .

我写了一个小解析方法:

Function Test(ByVal i As String) As Nullable(Of Integer)
Dim j As Integer

If Integer.TryParse(i, j) Then
Return j
Else
Return Nothing
End If
End Function

这似乎工作正常。但在这里,我可以返回 Integer如果我想:
Function Test(ByVal i As String) As Nullable(Of Integer)
Return 2 'or Return Nothing
End Function

我可以在 C#还有:
 static void Main(string[] args)
{
int? j = Test("1");
}

public static int? Test(string i)
{
return 2; //or return null
}

在上面的代码中,如果我更改 jint ,我会得到一个编译时转换错误,这完全有道理。

现在我的问题 - 在 VB 中,如果我尝试类似的方法:
Sub Main()
Dim j As Integer = Test("hello")
End Sub

Function Test(ByVal i As String) As Nullable(Of Integer)
Dim j As Integer
Return If(Integer.TryParse(i, j), j, Nothing)
End Function

或者,在我的测试案例中, i不是 Integer它可以重写为:
Function Test(ByVal i As String) As Nullable(Of Integer)
Return DirectCast(Nothing, Integer)
End Function

因为方式 Nothing在 VB.NET 中工作,此代码编译并运行没有错误 -- j 设置为整数的默认值 0 .

这对我来说太肮脏了。在这种情况下,您可以稍微改变方法的意图,而不会出现任何警告或错误。我只是好奇,我想这是不是一种无意的副产品 Nothing在 VB 中工作,还是这是预期目的?

最佳答案

您的 VB.Net 代码可以编译,因为您使用的是后期绑定(bind),它允许在运行时更改变量的类型。

如果你用 OPTION STRICT ON 编译你的代码,你会得到一个编译器错误,比如:

Option Strict On disallows implicit conversions from 'Integer?' to 'Integer'.

关于vb.net - VB Nullables 和 Nothing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485952/

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