¿Es seguro usar la using
declaración en un objeto (potencialmente) nulo?
Considere el siguiente ejemplo:
class Test {
IDisposable GetObject(string name) {
// returns null if not found
}
void DoSomething() {
using (IDisposable x = GetObject("invalid name")) {
if (x != null) {
// etc...
}
}
}
}
¿Se garantiza que Dispose
se invocará solo si el objeto no es nulo y no obtendré un NullReferenceException
?
c#
idisposable
using
Paolo Tedesco
fuente
fuente
Respuestas:
Sí,
Dispose()
solo se llama en objetos no nulos:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
fuente
Dispose()
solo se llama a objetos no nulos".La expansión para
using
verifica que el objeto no esténull
antes de invocarloDispose
, así que sí, es seguro.En su caso, obtendría algo como:
fuente
Deberías estar de acuerdo con eso:
Ninguna excepción lanzada aquí.
Nota al margen: no confunda esto con
foreach
yIEnumerable
dónde se lanzará una excepción.fuente
Sí, antes de desechar la referencia se verificará de forma nula. Puede examinarse viendo su código en Reflector.
fuente
No obtendrá una excepción de referencia nula según mi experiencia. Simplemente será ignorado.
fuente