在VB.NET中将Nothing赋值给Short变量

时间:2014-02-12 18:00:51

标签: vb.net

我有以下代码行。

Private Sub SomeFunction(ByRef SomeShortVariable As Nullable(Of Short))

    Dim SomeStringVariable As String = "" 'Let's assume it is "", that's how I am getting it in real time code

    SomeShortVariable = IIf(SomeStringVariable = "", Nothing, SomeStringVariable)  'I want to set SomeShortVariable to Nothing but I am getting 0

End Sub

变量SomeShortVariable始终设置为0,即使我希望它为Nothing

我知道默认情况下Short会将变量设置为0

但我怎样才能成功Nothing。我正在使用.NET 2.0

3 个答案:

答案 0 :(得分:4)

使SomeShortVariable成为Nullable(短)变量。

修改

此外,您的陈述应如下所示:

SomeShortVariable = If(String.IsNullOrEmpty(SomeStringVariable), Nothing, New Nullable(Of Short)(Short.Parse(SomeStringVariable)))

第二次编辑:

如果您使用的是Visual Studio 2005,则上述操作无效,因为If运算符仅在VS2008中引入。所以你要做的就是:

If String.IsNullOrEmpty(SomeStringVariable) Then
    SomeShortVariable = Nothing
Else
    SomeShortVariable = Short.Parse(SomeStringVariable)
End If

当然,您需要先验证SomeStringVariable数字字符串。 :)

答案 1 :(得分:2)

关于您的更新,这是因为它是Short,而不是参数中的Nullable(Of Short)。让它可以为空而且你已经完成了。虽然我会重构以避免ByRef,但请使用字符串参数SomeStringVariable并返回Nullable(Of Short)。然后事情会变得更有意义。

Private Shared Function SomeFunction(SomeStringVariable As String) _
                                                            As Nullable(Of Short)
  If String.IsNullOrEmpty(SomeStringVariable) Then
    Return Nothing
  Else
    Return Convert.ToInt16(SomeStringVariable)
  End If
End Function

编辑:实际上,简写语法在这种情况下不起作用,原因我在评论中概述了有关更改为If的原因。只是不要使用速记。

答案 2 :(得分:1)

注意在输入字符串可能不是空字符串而不是数字(任何用户提供的输入)的情况下使用Convert或Parse的建议。使用TryParse通常更好,除非你绝对确定有人没有通过你没想到的东西。请考虑以下事项:

Dim someString = "a"
Dim someShort as new Nullable(Of Short) 
Dim tempShort as Short

Console.WriteLine(someShort)

If Integer.TryParse(someString, tempShort) then
    someShort = tempShort
end if 

console.WriteLine(someShort)

if Not String.IsNullOrEmpty(someString) then
    someShort = Short.Parse(someString) ' Throws FormatException
end if

Console.WriteLine(someShort)