我有以下代码行。
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
。
答案 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)