为什么函数将NULL视为0

时间:2015-12-18 12:57:10

标签: vb.net visual-studio

我有这个功能:

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

3 个答案:

答案 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类型是一个坏主意,因为你可以将它传递给任何类型的对象,但是你假设它总是一个整数而且你没有检查;因此可能会导致异常。

我想指出的一些其他方面可以帮助您改进:

  1. 确保遵循正确的命名约定。方法名称应为上骆驼案(Pascal案例),例如。 ParseSex不是parseSex
  2. 始终正确缩进代码以使其更易于阅读。每个嵌套的"块"应该相对于包含它的块缩进。
  3. 为变量使用最具体的类型;除非绝对必要,否则从不使用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条件以查看是否需要返回男性或女性。