我有这个功能:
Public Function parseSex(ByVal sex As Object) As String
if Not Nothing then
if sex = 1 Then
Return "Male"
elseif sex = 0 Then
Return "Female"
else
Return "N/D"
End if
Else
Return "N/D"
End If
End Function
数据库可以返回0,1或NULL
但是,如果此函数从数据库接收NULL,则输出FEMALE,
为什么会发生这种情况以及如何解决?
我真的需要传递NULL,0或1
答案 0 :(得分:4)
我将重构您的方法,如下所示,将参数替换为可空Integer
(即Integer?
)而不是Object
,并将返回类型替换为Sex
枚举:
Public Enum Sex
Male
Female
NotDefined
End Enum
Public Function ParseSex(ByVal sex As Integer?) As Sex
If (sex.HasValue) Then
Select Case sex.Value
Case 1
Return Sex.Male
Case 0
Return Sex.Female
Case Else
Return Sex.NotDefined
End Select
Else
Return Sex.NotDefined
End If
End Function
如果您需要从返回值中获取字符串,只需在其上调用ToString()
。
在您拥有的代码中,您的行if Not Nothing then
将始终返回true。把它放在那里是没有意义的。另外,为方法arg设置Object
类型是一个坏主意,因为你可以将它传递给任何类型的对象,但是你假设它总是一个整数而且你没有检查;因此可能会导致异常。
我想指出的一些其他方面可以帮助您改进:
ParseSex
不是parseSex
。Object
类型。答案 1 :(得分:-1)
您是否必须将sex
作为对象传递?为什么你不能把它作为integer
传递给你?
像这样:
Public Function parseSex(ByVal sex As Integer) As String
if Not Nothing then
if sex = 1 Then
Return "Male"
elseif sex = 0 Then
Return "Female"
else
Return "N/D"
End if
Else
Return "N/D"
End If
End Function
或者数据库中该字段的数据类型是什么?
答案 2 :(得分:-1)
我很确定你应该在这里检查DBNull
Public Function parseSex(ByVal sex as integer) as string
if not isDBNull(sex) Then
if sex = 1 then
return "Male"
else
return "Female"
end if
return "N/D"
End If
因此,如果传递null,则返回N / D,否则它将运行if条件以查看是否需要返回男性或女性。