Frage Muss ich vor einem Befehl dispose () prüfen, ob das Objekt null ist?


Ich habe zum Beispiel ein Objekt HttpWebResponse , das implementiert IDisposableund sollte daher entsorgt werden.

Mit diesem:

HttpWebResponse a = ....;  

Was ist der richtige Umgang mit dem Objekt?

a.Dispose(); 

Oder:

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

Sollte es mir auch egal sein, wenn das Objekt null ist? Kann ich es nicht einfach entsorgen?


5
2018-06-30 12:14


Ursprung


Antworten:


Es wird allgemein empfohlen, alles, was implementiert, einzupacken IDisposable mit dem verwenden Erklärung

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

Es ist das Äquivalent zum Schreiben

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

Sollte es mir auch egal sein, wenn das Objekt null ist? Kann ich es nicht einfach entsorgen?

Nun, nein, denn wenn du versuchst anzurufen Dispose auf einen null Objekt wird die Anwendung werfen NullReferenceException. Angesichts Ihrer Umstände, wo Sie das Gefühl haben using Anweisung ist keine gültige Option. Eine andere Möglichkeit, dies aufzuräumen, besteht darin, eine Erweiterungsmethode zu schreiben, z.

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

Das dann würde Ermöglicht Ihnen, die Methode für ein Nullobjekt aufzurufen.


10
2018-06-30 12:16



überprüfen Sie zuerst, ob es nicht null ist, dann entsorgen Sie, sonst erhalten Sie eine Ausnahme natürlich.


0
2018-06-30 12:17