In Throw, the original exception stack trace will be retained. To keep the original stack trace information, the correct syntax is ‘throw’ without specifying an exception. In Throw ex, the original stack trace information will get override and you will lose the original exception stack trace.
throw reset the stack trace so we can get line number of error .by using throw we can get all exception information.but throw ex does not reset stack trace so that's why it will give only original information of exception.
throw ex resets the stack trace (so your errors would appear to originate from HandleException) throw doesn't - the original offender would be preserved.
Throw provide actual error Throw ex provide the stack trace
“Throw” statement preserves original error stack whereas “throw ex” have the stack trace from their throw point. It is always advised to use “throw” because it provides more accurate error information.