Lanzar la excepción de la función Llamada a la Llamada de la Función del Bloque Catch

internal static string ReadCSVFile(string filePath)
{
    try
    {
        ...
        ...
    }
    catch(FileNotFoundException ex)
    {
        throw ex;
    }
    catch(Exception ex)
    {
        throw ex;
    }
    finally
    {
        ...
    }
}


//Reading File Contents

public void ReadFile()
{
    try
    {
        ...
        ReadCSVFile(filePath);
        ...
    }
    catch(FileNotFoundException ex)
    {
        ...
    }
    catch(Exception ex)
    {
        ...
    }
}

Aquí en el ejemplo de código anterior, tengo dos funciones ReadFile y ReadCSVFile.
En el ReadCSVFile, puedo obtener una excepción de tipo FileNotFoundExceptioon, que se ve atrapado en el catch(FileNotFoundException) bloque. Pero cuando lanzo esta excepción a estar atrapado en el catch(FileNotFoundException) de la ReadFile() Función, se ve atrapado en el catch(Exception) bloque en lugar de catch(FileNotFoundException). Por otra parte, durante la depuración, el valor de la ex dice que el Objeto No Inicializado. ¿Cómo puedo lanzar la excepción de la función llamada a la llamada de la función del bloque catch, sin perder la excepción interna o al menos el mensaje de excepción?

como utilizar la misma excepción objeto local, está seguro de la excepción interna es de tipo FileNotFoundException?
posibles duplicados de .NET – Lanzar Excepciones de las mejores prácticas
No es un duplicado, pero una pregunta que carecen de información para demostrar por qué es no duplicar 🙂

OriginalEl autor Anubhav Ranjan | 2011-08-11

5 Kommentare

  1. 12

    Tienes que utilizar throw; en lugar de throw ex;:

    internal static string ReadCSVFile(string filePath)
    {
        try
        {
            ...
            ...
        }
        catch(FileNotFoundException ex)
        {
            throw;
        }
        catch(Exception ex)
        {
            throw;
        }
        finally
        {
            ...
        }
    }

    Además de eso, si usted no hace nada en su bloque catch pero la regeneración, no es necesario que el bloque catch a todos:

    internal static string ReadCSVFile(string filePath)
    {
        try
        {
            ...
            ...
        }
        finally
        {
            ...
        }
    }

    Implementar el bloque catch sólo:

    1. cuando se desea manejar la excepción.
    2. cuando usted desea agregar información adicional a la excepción por el lanzamiento de una nueva excepción con la cogió uno como excepción interna:

      catch(Exception exc) { throw new MessageException("Message", exc); }

    Usted no tiene que implementar un bloque catch en cada método en el que una excepción puede propagarse a través de.

    He intentado utilizar solo tiro, pero el resultado sigue siendo el mismo. Por otra parte, de hecho, estoy adjuntando un mensaje personalizado a la excepción y luego tirar.
    Entonces usted tiene que lanzar una nueva excepción con el mensaje personalizado y la excepción capturada como excepción interna: catch(Exception exc) { throw new MessageException(«Mensaje», exc); }

    OriginalEl autor PVitt

  2. 1

    Solo uso el tiro en la función llamada. No sobrecarga bloques catch con varios tipos de excepción. Deje que la persona que llama a cuidar de ello.

    OriginalEl autor Zenwalker

  3. 1

    Debe reemplazar

    throw ex;

    por

    throw;
    Yo lo he intentado, pero no hay ayuda. Todavía me ObjectNotInitialized en el autor de la Llamada del bloque catch para el objeto de Excepción.
    Este podría ser otro de excepción?

    OriginalEl autor sll

  4. 0

    En la función llamada solo uso tire como este

     try
     {
       //you code
     }
     catch
     {
         throw;
    }

    Ahora, si la excepción aquí surgen entonces esto va a ser capturado por la llamada de la función .

    OriginalEl autor Syeda

  5. 0

    El código funciona bien aquí, Marque aquí http://ideone.com/jOlYQ

    Hay alguna diferencia si el fragmento de código que pertenece a un servicio web en lugar de una simple consola de código???
    No debería ser. Un webservice es de nuevo un serivice que está alojado en algunos de contenedor y que podría ser otra aplicación de consola, aunque doesnth tener un visualmente consola representado para el usuario. Así que es básicamente de C# y no.

    OriginalEl autor Zenwalker

Kommentieren Sie den Artikel

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

Pruebas en línea