You are developing an application that uses structured exception handling. The application includes a class
named ExceptionLogger. The ExceptionLogger class implements a method named LogException by
using the following code segment:
public static void LogException(Exception ex)
You have the following requirements:
log all exceptions by using the LogException() method of the ExceptionLogger class.
rethrow the original exception, including the entire exception stack.
You need to meet the requirements. Which code segment should you use?
A.
catch (Exception ex)
{
ExceptionLogger.LogException(ex);
throw;
}
B.
catch (Exception ex)
{
ExceptionLogger.LogException(ex);
throw ex;
}
C.
catch
{
ExceptionLogger.LogException(new Exception());
throw;
}
D.
catch
{
var ex = new Exception();
throw ex;
}
Explanation:
Once an exception is thrown, part of the information it carries is the stack trace. The stack trace is a list of the
method call hierarchy that starts with the method that throws the exception and ends with the method that
catches the exception. If an exception is re-thrown by specifying the exception in the throw statement, the stack
trace is restarted at the current method and the list of method calls between the original method that threw the
exception and the current method is lost. To keep the original stack trace information with the exception, use
the throw statement without specifying the exception. http://msdn.microsoft.com/en-us/library/ms182363
(v=vs.110).aspx