在IsNothing()语句中避免调试器警告

时间:2014-02-05 12:59:30

标签: c# vb.net try-catch compiler-warnings nothing

我正在使用Visual Studio 2012并具有以下代码块。代码检查特定文件的文件类型(这就是为什么返回True / False)。如果遇到错误,它也会返回false。我得到的警告是我在初始化之前使用fs / br变量,这是真的。这就是为什么我有IsNothing语句,但我在IsNothing语句中得到警告,我不知道如何避免这种情况,因为我不想把fs = New FileStream(fn, FileMode.Open)br = ...语句放在Try之外/ Catch block。

代码本身是有效的,所以警告并不是一个真正的问题,但它仍然困扰我。有没有人看到一个解决方案如何更改此块以提供相同的安全性而不发出警告?

欢迎使用VB.NET或C#答案。

            Dim fs As FileStream
            Dim br As BinaryReader
            Try
                fs = New FileStream(fn, FileMode.Open) 'Open the file
                br = New BinaryReader(fs) 'Initilize the reader
                'File reading code omitted here
                br.Close() 'Close the reader and underlying stream
            Catch
                If Not IsNothing(fs) Then fs.Close() 'Warning here
                If Not IsNothing(br) Then br.Close() 'and here
                Return False
            End Try

2 个答案:

答案 0 :(得分:2)

  

这就是为什么我有IsNothing语句

这表明在给定特定值之前,您希望值为IsNothing。在C#中,这不仅仅是一个警告 - 这将是一个错误。

我有两点建议:

  • 如果确实想要遵循此模式,只需将值设置为Nothing即可:

    Dim fs As FileStream = Nothing
    Dim br As BinaryReader = Nothing
    
  • 如果可能的话,重新组织您的代码,这样您就可以使用Using语句,这将在块的末尾以任何方式关闭流。我们现在无法充分了解其余的代码来帮助您实现这一目标。

答案 1 :(得分:1)

你可以重新编写它而不必使用嵌套的使用块 - 你可以在一行中完成所有 - 我不相信你可以在C#中这样做:

    Try
        Using fs As New FileStream(fn, FileMode.Open), br As New BinaryReader(fs)
            Try

            Catch ex As Exception
                'an exception here indicates an issue reading the file
            End Try
        End Using
    Catch ex As Exception
        'an exception here indicates an issue opening the filestream or reader
    End Try

使用块确保处理对象而无需显式调用.Dispose它也调用.Close,因此您甚至不需要该行