statement mit einem Null-Objekt verwenden

Ist es sicher, die using statement für ein (potentiell) Null-Objekt zu verwenden?
Betrachten Sie das folgende Beispiel:

 class Test { IDisposable GetObject(string name) { // returns null if not found } void DoSomething() { using (IDisposable x = GetObject("invalid name")) { if (x != null) { // etc... } } } } 

Ist es sicher, dass Dispose nur Dispose wird, wenn das Objekt nicht null ist und ich keine NullReferenceException ?

Ja, Dispose() wird nur für Nicht-Null-Objekte aufgerufen:

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

Die Erweiterung für die using überprüft, ob das Objekt nicht null bevor Dispose wird, also ist es sicher.

In Ihrem Fall würden Sie etwas erhalten wie:

 IDisposable x = GetObject("invalid name"); try { // etc... } finally { if(x != null) { x.Dispose(); } } 

Du solltest damit einverstanden sein:

 using ((IDisposable)null) { } 

Keine Ausnahme hier geworfen.

Randnotiz: Verwechseln Sie das nicht mit foreach und IEnumerable wo eine Ausnahme ausgetriggers wird.

Ja, vor der Disposition wird die Referenz nicht geprüft. Sie können sich selbst überprüfen, indem Sie Ihren Code in Reflector anzeigen.

Sie erhalten keine Null-Referenz-Ausnahme gemäß meiner Erfahrung. Es wird einfach ignoriert.