La sentencia using (...) es azúcar sintáctica para try {} finally {}.Usando statement y try-catch() - finalmente ¿repetición?
Pero si luego tengo una instrucción using, como a continuación:
using (FileStream fs = File.Open(path))
{
}
Ahora quiero coger las excepciones que la apertura de este archivo podría causar (y este es el código riesgo bastante alto, ya que puede fallar debido a la el medio ambiente), pero si escribo try-catch adentro, ¿no sería repetición? Cuando el código se compila en IL, ¿supongo que la repetición se borrará cuando el código esté JITted?
Sin embargo, me gustaría ver las excepciones que puede causar un archivo (así que debería cerrar el try-catch fuera del alcance de la sentencia using), y también las excepciones para lo que haga dentro del bloque using así que debería agregar el try-catch dentro del bloque.
Parece que estoy añadiendo mucha repetición a lo que la CLR probablemente hace dentro. ¿El CLR agrega cláusulas catch?
Mi colega argumentó que una declaración de uso es desordenada (pero esto se debió a que una sola línea era ligeramente larga debido a la codificación difícil ya que necesitaba cambiarlas muy rápido y no tenía acceso a otras partes del código base). Dicho colega no usa el enunciado using, pero ¿existe alguna diferencia funcional entre el enunciado using y try-finally/try-catch-finally? Vi un caso de esto en el que los servicios de WCF tienen un caso de esquineros no muy conocido sobre el uso de valores devueltos y finalmente (algo sobre finalmente). La solución fue usar un bloque de verificación. ¿Hay algo como esto en C#?
En otro aspecto, ¿todos los tipos que implementan IDisposale propietarios de recursos no administrados? Una discusión con mi amigo señaló la respuesta a ser no. (También he leído algunos hilos en la sección de uso de este foro, algunos muy buenos conocimientos allí).
El uso ¿soporta finalmente aunque? ¿Dónde se enteró sobre el uso, usando un bloque de alcance anónimo? Me gustaría saber más sobre esto. Entonces, cuando abro un archivo en un bloque que usa (por ejemplo, FileSream.Open()), esta excepción aparecerá. Si la instrucción using implementa try/finally, tengo que ajustar eso en try/catch solo para tener el catch. – dotnetdev