我在互联网上找到了一些代码,如下所示(略有修改)。
它只是请求网页的内容。
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块中。
这是可行的方法,还是可以使用其他方法阻止警告?
提前感谢您的启发! :)
答案 0 :(得分:10)
默认情况下你可以简单地设置它们,这样你就会告诉编译器你知道你在做什么:)
Dim Str As System.IO.Stream = Nothing
答案 1 :(得分:3)
警告是因为如果GetResponseStream上有错误,那么你的srRead将为null,从而导致Null异常。
处理此问题的一种方法是使用“自动处理这些对象”
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
您也可以采用Dr. Evil建议将对象设置为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