从C sharp到Vb简单问题的初学者移民

Fau*_*Orc 0 .net c# vb.net

Public Function ExecCommand(ByVal sql As String) As SqlDataReader
    Dim dReader As SqlDataReader
    Dim cmd As New SqlCommand()
    cmd.CommandText = sql
    cmd.Connection = sm
    Dim isOpened = OpenConnection()
    If isOpened Then
      dReader = cmd.ExecuteReader()
      CloseConnection()
    End If
    Return dReader
End Function
Run Code Online (Sandbox Code Playgroud)

它表示在运行时可能会发生空引用以声明该datareader.这是为什么?

Dar*_*rov 5

那是因为dReader如果不满足If条件,则可能不会初始化变量.您可以Nothing默认将其初始化为:

Dim dReader As SqlDataReader = Nothing
Run Code Online (Sandbox Code Playgroud)

显然,这种方法的调用者需要处理这种情况.

另外,作为C#移民,您可能会惊讶于为什么您没有收到编译时错误而只是警告.