Wie behandelt man die von Dispose geworfene Ausnahme?

Kürzlich, ich wurde untersucht, einige knifflige bugs über das Objekt nicht entsorgt.

Fand ich einige Muster im code. Es wird berichtet, dass einige m_foo nicht entsorgt, während es scheint, alle Instanzen von SomeClass entsorgt wurde.

public class SomeClass: IDisposable
{
    void Dispose()
    {
       if (m_foo != null)
       {
          m_foo.Dispose();
       }
       if (m_bar != null)
       {
          m_bar.Dispose();
       }   
    }

    private Foo m_foo;

    private Bar m_bar;

}

Ich den Verdacht, dass Foo.Entsorgen Sie könnten werfen eine Ausnahme, so dass der folgende code nicht ausgeführt, so m_bar nicht entsorgt.

Da Foo/Bar kann von einem Dritten, so ist es nicht gewährleistet, dass Sie nicht werfen Ausnahme.

Wenn nur wickeln Sie alle Entsorgen Aufruf mit try-catch, der code wird wiederum zu plump.

Was ist best practice, um diese zu bewältigen?

InformationsquelleAutor der Frage Morgan Cheng | 2009-06-23

Schreibe einen Kommentar