Est-il sûr d'utiliser l' using
instruction sur un objet (potentiellement) nul?
Prenons l'exemple suivant:
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
Est-il garanti qu'il Dispose
ne sera appelé que si l'objet n'est pas nul et que je n'obtiendrai pas de NullReferenceException
?
c#
idisposable
using
Paolo Tedesco
la source
la source
Réponses:
Oui,
Dispose()
n'est appelé que sur les objets non nuls:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
la source
Dispose()
n'est appelé que sur des objets non nuls".L'expansion de
using
vérifie que l'objet n'est pasnull
avant de l'appelerDispose
, donc oui, c'est sûr.Dans votre cas, vous obtiendrez quelque chose comme:
la source
Vous devriez être d'accord avec ça:
Aucune exception jetée ici.
Remarque: ne vous méprenez pas avec
foreach
etIEnumerable
où une exception sera levée.la source
Oui, avant de se débarrasser, la référence sera vérifiée par zéro. Vous pouvez vous examiner en affichant votre code dans Reflector.
la source
Vous n'obtiendrez pas d'exception de référence nulle selon mon expérience. Il sera simplement ignoré.
la source