2017-10-06 15 views
0

ちょうど私が継承されたアプリケーションの一つにコード分析を実行し、それは次のようなコードに関する警告を発生させたオブジェクトの処分の可能性について警告しますfinallyブロックでは、警告は発生しません。ストリームライターを閉じると、基礎となるファイルのみが閉じられたが、実際にはライターオブジェクトは破棄されなかったという印象を受けました。コード解析が壊れているのですか、ストリーム作成者の使用方法を誤解していますか?コード分析は二回

ここでは、コード分析は二回作家と基になるストリームの両方の可能性のある処分文句を言う別の例です:

using (TextReader tr = new StreamReader(File.OpenRead(filename))) 
{ 
    while (tr.ReadLine() != null) 
    { 
     counter++; 
    } 

    tr.Close(); 
} 

それはそうです、あなたは処分している、trFile.OpenRead(filename)

+0

'using'がインスタンスを自動的に破棄するので、' .Close() 'や' .Dispose() 'を明示的に呼び出す必要はありません。私はグーグルに言いました、どのように '使用していますか? –

+0

はい、' Close'は 'Dispose'を呼び出します。これは奇妙なAPIです。 – Blorgbeard

+3

@o_O質問者は、「クローズ」は処分とは違っていたと考えていました。「使用する」はオブジェクトを処分しないということではありませんでした。 – Servy

答えて

2

Close just calls Dispose on the object両方について不平を言いますオブジェクトの2倍。

+0

はい、私はその部分を逃しました。一貫性、Microsoft?まず、 'using'に 'IDisposable'をラップして、これを望みます。 – ajeh