Ich deklariere die Objekte gerne, ohne sie zu initialisieren, aber setze ihre Standardwerte auf Nothing
. Dann schreibe ich am Ende der Schleife:
If anObject IsNot Nothing Then anObject.Dispose()
Hier ist ein vollständiges Beispiel:
Public Sub Example()
Dim inputPdf As PdfReader = Nothing, inputDoc As Document = Nothing, outputWriter As PdfWriter = Nothing
'code goes here that may or may not end up using all three objects,
' such as when I see that there aren't enough pages in the pdf once I open
' the pdfreader and then abort by jumping to my cleanup routine using a goto ..
GoodExit:
If inputPdf IsNot Nothing Then inputPdf.Dispose()
If inputDoc IsNot Nothing Then inputDoc.Dispose()
If outputWriter IsNot Nothing Then outputWriter.Dispose()
End Sub
Dies funktioniert auch hervorragend, um Ihre Hauptobjekte an die Spitze einer Routine zu setzen, sie in einer Try
Routine zu verwenden und sie dann in einem Finally
Block zu entsorgen :
Private Sub Test()
Dim aForm As System.Windows.Forms.Form = Nothing
Try
Dim sName As String = aForm.Name 'null ref should occur
Catch ex As Exception
'got null exception, no doubt
Finally
'proper disposal occurs, error or no error, initialized or not..
If aForm IsNot Nothing Then aForm.Dispose()
End Try
End Sub
bool IsDisposed { get; }
Erklärung dazu gibtSystem.IDisposable
.