c# try-catch using-statement

c# - ¿Dónde pongo try/catch con la declaración "utilizando"?



try-catch using-statement (3)

Si necesita un bloque try / catch de todos modos, la declaración de uso no le está comprando mucho. Solo córtalo y haz esto en su lugar:

StreamWriter sw = null; try { sw = File.AppendText(filePath); sw.WriteLine(message); } catch(Exception) { } finally { if (sw != null) sw.Dispose(); }

Posible duplicado:
Intentar / atrapar + usar, sintaxis derecha

Me gustaría try/catch lo siguiente:

//write to file using (StreamWriter sw = File.AppendText(filePath)) { sw.WriteLine(message); }

¿Pongo los bloques try/catch dentro de la instrucción using o, alrededor de él? ¿O ambos?


Si su declaración de captura necesita acceder a la variable declarada en una declaración de uso, entonces su única opción es adentro.

Si su declaración de captura necesita el objeto al que se hace referencia en el uso antes de desecharlo, entonces su única opción es adentro.

Si su declaración de captura realiza una acción de duración desconocida, como mostrar un mensaje al usuario, y desea disponer de sus recursos antes de que eso suceda, entonces afuera es su mejor opción.

Cuando tengo un escenario similar a este, el bloque try-catch generalmente está en un método diferente más arriba en la pila de llamadas que en el uso. No es típico que un método sepa cómo manejar las excepciones que ocurren dentro de esta manera.

Así que mi recomendación general es afuera, muy afuera.

private void saveButton_Click(object sender, EventArgs args) { try { SaveFile(myFile); // The using statement will appear somewhere in here. } catch (IOException ex) { MessageBox.Show(ex.Message); } }


Supongo que esta es la forma preferida:

try { using (StreamWriter sw = File.AppendText(filePath)) { sw.WriteLine(message); } } catch(Exception ex) { // Handle exception }