Define your custom exception class, and put the original exception as the inner exception, and throw the wrapped exception:
public class CustomException : Exception
{
public CustomException()
: base()
{
}
public CustomException(string message)
: base(message)
{
}
public CustomException(string message, Exception innerException)
: base(message, innerException)
{
}
//...other constructors with parametrized messages for localization if needed
}
catch (Exception ex)
{
throw new CustomException("Something went wrong", ex);
}
Of course its name should be changed accordingly. This way you have full control on exceptions used in your domain, and you don't loose any information from the original throw.
It is very helpful, especially in large projects, to have custom exceptions with good class names. They help in diagnosing problems from first sight in many simple situations, without the need of reading into exception's details and debugging. The latter is needed only when some really elaborate problems occurs. Thus, throwing around bare Exception instances wrapped around each other seems a bad practice.