Utilisation de l’instruction avec un object nul

Est-il sécuritaire d’utiliser l’instruction using sur un object (potentiellement) nul?
Prenons l’exemple suivant:

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

Est-il garanti que Dispose ne sera appelé que si l’object n’est pas nul et que je ne NullReferenceException pas une NullReferenceException ?

Oui, Dispose() est uniquement appelé sur des objects non nuls:

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

L’expansion pour l’ using vérifie que l’object n’est pas null avant d’appeler Dispose , donc oui, c’est sûr.

Dans votre cas, vous obtiendriez quelque chose comme:

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

Vous devriez être d’accord avec ça:

 using ((IDisposable)null) { } 

Aucune exception lancée ici.

Note latérale: ne confondez pas ceci avec foreach et IEnumerable où une exception sera lancée.

Oui, avant de jeter la référence sera vérifiée par null. Vous pouvez vous examiner en consultant votre code dans Reflector.

Vous n’obtiendrez pas d’exception de référence null selon mon expérience. Il sera simplement ignoré.