11

たとえばHttpWebResponse、 を実装しているIDisposableため、破棄する必要があるオブジェクトがあります。

これを持っている:

HttpWebResponse a = ....;  

オブジェクトを処理する正しい方法は何ですか?

a.Dispose(); 

または:

if (a!= null)
    a.Dispose();  

オブジェクトが null であるかどうかさえ気にする必要がありますか? とにかく処分できないのでしょうか?

4

2 に答える 2

16

usingステートメントで実装IDisposableするものはすべてラップすることをお勧めします。

using (var a = new HttpWebResponse(...))
{
}

書くのと同じです

var a = new HttpWebResponse(...);
try
{
   // use a
}
finally
{
    if (a != null)
        a.Dispose();
}

オブジェクトが null であるかどうかさえ気にする必要がありますか? どうせ処分するしかないでしょ

Disposeいいえ、オブジェクトを呼び出そうとするとnull、アプリケーションはNullReferenceException. ステートメントが有効なオプションではないと感じる状況を考えると、usingこれを整理するもう1つのきちんとした方法は、拡張メソッドを作成することです。

public static class Ext
{
    public static void SafeDispose(this object obj)
    {
        if (obj != null)
            obj.Dispose();
    }
}
...
var a = new ...;
a.SafeDispose();

これにより、null オブジェクトでメソッドを呼び出すことができます。

于 2013-06-30T12:16:24.483 に答える
0

最初にnullでないかどうかを確認してから破棄します。そうしないと、もちろん例外が発生します。

于 2013-06-30T12:17:21.827 に答える