【发布时间】:2015-08-09 17:52:43
【问题描述】:
我在 VB.NET 中研究了 C# 的 default 关键字等效性,发现了 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
}
在上面的代码中,如果我将j 更改为int,我会得到一个编译时转换错误,这完全可以理解。
现在我的问题 - 在 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中工作方式的无意副产品,还是预期目的?
【问题讨论】:
-
是的,Int 在 vb 中默认为
0...
标签: vb.net default-value nothing