0

私は今、問題の原因を突き止めようとしています。例外処理が不足しているため、エラーの原因を推測しています。これが私の質問です。メソッドが XmlTextReader オブジェクトを返す場合、finally ブロックが .Close() メソッドを実行する try/catch/finally でラップされている場合、そのオブジェクトは null になりますか?

はいの場合、これらのリソースを適切に破棄するにはどうすればよいですか? .Clone() または .Copy() メソッドがないことはわかっていますが、これを達成する別の方法はありますか? XmlTextReader および XmlReader オブジェクトの破棄についても気にする必要がありますか?

ありがとう

4

1 に答える 1

1

XmlReader呼び出し元に返す前に、閉じたり破棄したりしてはなりません。

いいえ、Dispose/オブジェクトCloseに割り当てませんnull。解放する必要があると感じたリソースを解放するようオブジェクトに要求するだけです。

XmlReader GetReader()
{
   XmlRead reader = ....

   // DO NOT dispose/close reader here with 
   // reader.Dispose() or using(reader){...}

   return reader;
}

使用法:

using(var reader = GetReader()) {...}

Dispose多くのタイプは、呼び出された後のデータへのアクセスを保護することに注意してください。.Net の多くのクラスで使用されるアプローチは、呼び出された後にObjectDisposedExceptionDisposeでオブジェクトの状態にアクセスするためのすべての呼び出しを失敗させることです。

于 2012-05-17T16:53:04.817 に答える