Разница между throw и throw e в C# заключается в том, что throw используется для повторного выброса исключения, а throw e — для создания вновь созданного исключения. 2
throw может использоваться только в catch и пробрасывает пойманное этим catch исключение выше так, как будто его не поймали. 4 При этом он сохраняет трассировку стека (путь к источнику исключения). 5
throw e берёт объект исключения и бросает его. 4 Этот объект поймает первый соответствующий catch выше по стеку. 4 В момент бросания к исключению привязывается стек вызовов, от того места, где был вызван throw e и выше. 4 Поймав этот объект выше, можно узнать точное место, где был вызван throw e. 4