Tiro de excepción en el bloque try

    try { 
        if (isFileDownloaded)
            //do stuff
        else
            throw new CustomException()
   } 
   catch (Exception e)
   {
       //something went wrong save error to log
   }
   finally
   {
       //release resources
   }

Mi pregunta es la catch capturas de la ApplicationException tirado en el bloque try? es en mala el estilo de codificación? Debe ser escrita de otra manera?

OriginalEl autor Quincy | 2010-07-20

4 Kommentare

  1. 23

    La catch se captura la excepción (y de cualquier otro que se produce). Dicho esto, yo trato de evitar tener que escribir un código como este cuando sea posible.

    Personalmente veo un poco de razón a la vez tiene manejo de excepciones (captura) para una excepción en el mismo ámbito. Si usted puede manejar su error en el método de poner el control de excepciones (es decir: el registro) directamente en el bloque try así.

    El uso de un catch es más útil, la OMI, para la captura de excepciones lanzadas por los métodos dentro de su try bloque. Esto sería más útil, por ejemplo, si su //do stuff sección ocurrió llamar a un método que planteó una excepción.

    También, recomiendo que no la captura de todas las excepciones (Exception e), sino más bien los tipos de excepciones que usted puede manejar correctamente. La única excepción a esto sería si estás regeneración de la excepción dentro de su captura, es decir: el uso es con fines de registro pero sigue dejando burbuja de la pila de llamadas.

    Cualquier cosa que usted podría hacer en la captura se puede hacer en la cosa que provoca la excepción. Sólo se debe plantear excepciones en circunstancias excepcionales. Como un aparte que no debe acostumbrarse a llamar a excepción de los objetos e. Este va a entrar en conflicto con la EventArgs parámetro en los controladores de eventos.
    te gustaría hacer en la captura se puede hacer en la cosa que provoca la excepción.» – Ese fue mi punto 🙂 Como para el resto de argumentos, estoy de acuerdo en un punto, pero yo personalmente no tengo ningún problema con la nomenclatura de objetos de excepción e (aunque yo suelo usar un nombre más significativo), ya que rara vez se utiliza con EventArgs directamente.
    ¿Por qué los downvotes? Sólo por curiosidad 😉
    Digamos que tengo un método que lee algunos archivos XML con las instrucciones. Se podría lanzar una excepción debido a la e/S de disco o de análisis de XML, pero ambos se espera que sean muy raros. También puede encontrar que el contenido del XML no son válidos en cuanto a su semántica, que es también rara. Dado que ya tenemos un bloque catch que registra el fracaso ya, ¿cómo es mala para lanzar una excepción cuando lleguemos a una semántica de la violación?
    +1 No-votos de mí. Su respuesta es más profundo y reflexivo que el mío 🙂

    OriginalEl autor Reed Copsey

  2. 7

    Sí, y se capturan ApplicationException, ya que se deriva de Exception.

    El manejo de la base de la excepción debe estar bien en la mayoría de los casos a menos que usted necesita para iniciar o hacer algo con un tipo diferente de excepción

    try{
        if (isFileDownloaded)
           //do stuff
        else
           throw new ApplicationException();
    }
    catch(ApplicationException ae)
    {
       //log it application exception here...
    }
    
    catch(Exception ex)
    {
       //log all other exceptions here...
    }
    finally
    {
       //release resources...
    }

    OriginalEl autor xandercoded

  3. 1

    Sí la captura de la captura de su ApplicationException y sí se es pobre estilo de codificación. Como una buena regla general que sólo captura excepción específica y aquellos que usted va a hacer algo, como en la fijación de estado de la aplicación.

    OriginalEl autor btlog

  4. 1

    También, para su INFORMACIÓN, ApplicationException ha quedado obsoleto ya .NET 2.0 como una excepción a la deriva. Nunca fue la intención como una excepción a tirar de su propia, así que probablemente usted no utiliza en absoluto.

    FxCop hace cumplir estas reglas. Usted no puede lanzar una excepción base o se derivan de ApplicationException o SystemException. Estos son la base de las excepciones junto con Exception sí mismo

    OriginalEl autor John Saunders

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea