¿Es seguro usar la usingdeclaració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 Disposese 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
usingverifica que el objeto no esténullantes 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
foreachyIEnumerabledó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