uso que programacion operando implementar debe c# asp.net using-statement

c# - operando - que es using en programacion



¿Aún se llama a Dispose cuando se lanza una excepción dentro de una instrucción using? (2)

Así es como el reflector decodifica el IL generado por su código:

private static void Main(string[] args) { SqlConnection conn = new SqlConnection("..."); try { conn.Open(); DoStuff(); } finally { if (conn != null) { conn.Dispose(); } } }

Entonces la respuesta es sí, cerrará la conexión si

DoStuff() arroja una excepción.

En el siguiente ejemplo, ¿la conexión se cerrará y desechará cuando se produzca una excepción si está dentro de una instrucción using ?

using (var conn = new SqlConnection("...")) { conn.Open(); // stuff happens here and exception is thrown... }

Sé que este código a continuación se asegurará de que lo haga, pero tengo curiosidad de cómo lo hace el uso de la declaración.

var conn; try { conn = new SqlConnection("..."); conn.Open(); // stuff happens here and exception is thrown... } // catch it or let it bubble up finally { conn.Dispose(); }

Relacionado:

¿Cuál es la forma correcta de garantizar que una conexión SQL se cierre cuando se lanza una excepción?

Sí, al using su código en un bloque try / finally donde la porción final llamará a Dispose() si existe. Sin embargo, no llamará directamente a Close() ya que solo verifica la interfaz IDisposable que se está implementando y, por lo tanto, el método Dispose() .

Ver también: