En la mayoría de los ejemplos que se encuentran en la web cuando explícitamente no usar "usando", el patrón se ve algo como:IDisposable: ¿es necesario verificar null en finally {}?
SqlConnection c = new SqlConnection(@"...");
try {
c.Open();
...
} finally {
if (c != null) //<== check for null
c.Dispose();
}
Si utiliza el "uso" y mirar el código IL generado, puede ver que se genera el cheque por nula
L_0024: ldloc.1
L_0025: ldnull
L_0026: ceq
L_0028: stloc.s CS$4$0000
L_002a: ldloc.s CS$4$0000
L_002c: brtrue.s L_0035
L_002e: ldloc.1
L_002f: callvirt instance void [mscorlib]System.IDisposable::Dispose()
L_0034: nop
L_0035: endfinally
entiendo por qué la IL se traduce para comprobar nula (no sabe lo que hizo en el interior del bloque de usar), pero si usted está utilizando try .. finalmente y usted tiene el control total de cómo el objeto IDisposable se usa dentro del intento ... por fin bl ock, ¿realmente necesitas verificar null? si es así, ¿por qué?
¿Podría ser para salvaguardar contra una excepción de referencia nula en el caso de que establezca la variable como nula dentro del bloque using/try? – Gishu
eso es lo que estoy pensando – BlackTigerX
Buena pregunta ... me hizo sacar mi teclado de códigos y aprender algo nuevo. – Gishu