1

Visual Studio 2012 を使用しており、次のコード ブロックがあります。このコードは、特定のファイルのファイル タイプをチェックします (そのため、True/False が返されます)。エラーが発生した場合も false を返します。初期化する前に fs/br 変数を使用しているという警告が表示されますが、これは事実です。そのため、IsNothing ステートメントを使用していますが、IsNothing ステートメントで警告が表示されます。Try /Catch ブロックの外側にfs = New FileStream(fn, FileMode.Open)andステートメントを配置したくないため、それを回避する方法がわかりません。br = ...

コード自体は機能するので、警告は実際には問題になりませんが、それでも気になります。警告なしで同じ安全性を提供するためにこのブロックを変更する方法を知っている人はいますか?

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
4

2 に答える 2

2

それが私が IsNothing ステートメントを持っている理由です

これは、特定の値が与えられる前に値が IsNothing であることを期待していることを示唆しています。C# では、これは単なる警告ではなく、エラーになります。

2 つの提案があります。

  • 本当にこのパターンに従いたい場合はNothing、最初から値を設定してください。

    Dim fs As FileStream = Nothing
    Dim br As BinaryReader = Nothing
    
  • 可能であれば、コードを再編成して、Using代わりにステートメントを使用できるようにします。これにより、どちらの方法でもブロックの最後でストリームが閉じられます。ただし、現時点では、コードの残りの部分について十分に説明することはできません。
于 2014-02-05T13:02:59.063 に答える