предотвратить предупреждения о переменных, которым не присвоено значение в Try - PullRequest
1 голос
/ 23 декабря 2010

Я нашел в Интернете некоторый код, как показано ниже (слегка измененный).

Он просто запрашивает содержимое веб-страницы.

Private Sub readWebpage(ByVal url As String)
    Dim Str As System.IO.Stream
    Dim srRead As System.IO.StreamReader
    Try
        ' make a Web request
        Dim req As System.Net.WebRequest = System.Net.WebRequest.Create(url)
        Dim resp As System.Net.WebResponse = req.GetResponse
        Str = resp.GetResponseStream
        srRead = New System.IO.StreamReader(Str)
        ' read all the text 
        textContent.text = srRead.ReadToEnd
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Unable to download content from: " & url)
    Finally
        srRead.Close()
        Str.Close()
    End Try
End Sub

Однако я получаю два предупреждения:

Warning 1   Variable 'srRead' is used before it has been assigned a value. A null reference exception could result at runtime.


Warning 2   Variable 'Str' is used before it has been assigned a value. A null reference exception could result at runtime.

Я знаю, что могу просто забыть о Finally и добавить код в блок try.

Это будет путь или я могу предотвратить предупреждения, используя другой подход?

Спасибо заранее за то, что просветили меня!:)

Ответы [ 2 ]

10 голосов
/ 23 декабря 2010

Вы можете просто установить их по умолчанию Ничего, таким образом, вы сообщите компилятору, что знаете, что делаете:)

Dim Str As System.IO.Stream = Nothing
3 голосов
/ 23 декабря 2010

Предупреждение состоит в том, что в случае ошибки в GetResponseStream ваш srRead будет иметь значение null, что приведет к исключению Null.

Одним из способов справиться с этим является использование Using, которое автоматически удаляет эти объекты

 Private Sub readWebpage(ByVal url As String)
        Try
            ' make a Web request
            Dim req As System.Net.WebRequest = System.Net.WebRequest.Create(url)
            Dim resp As System.Net.WebResponse = req.GetResponse
            Using Str As System.IO.Stream = resp.GetResponseStream
                Using srRead As System.IO.StreamReader = New System.IO.StreamReader(Str)
                    textContent = srRead.ReadToEnd
                End Using
            End Using


    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Unable to download content from: " & url)

    End Try
  End Sub

Вы также можете пойти по пути, в котором доктор Зло предлагает установить для объекта значение Nothing вместо ключевого слова Using, тогда вы захотите сделать это в вашем окончательном

Finally 
        If Str Is Not Nothing Then
            Str.Close
        End If
        If srRead Is Not Nothing Then
            srRead.Close
        End If
End Try
...