Да, эти два подхода имеют почти одинаковый эффект;повторное бросание разматывает стек исключения - это означает, что стек укладывается «ниже» метода, в котором throw;
будет отброшен.Они по-прежнему будут находиться в трассировке стека , но вы не сможете получить доступ к их локальным переменным в отладчике, если не разбьете на выброшенные исключения.
Блок захвата / выброса, подобныйнижеприведенный пример, в котором вы ничего не делаете с исключением (например, ведение журнала), бесполезен:
catch (Exception)
{
throw;
}
Удалите его, чтобы очистить оба образца.В общем, по возможности избегайте ввода блока catch
И у вашего метода есть еще одна проблема, связанная с исключением, он не освобождает ресурсы должным образом.tr2.Close();
принадлежит предложению finally
, но гораздо проще позволить компилятору справиться с этим с помощью блока using() {}
:
void MyFileHandlingMethod()
{
...
using (TextReader tr2 = new StreamReader(nfilepath))
{
resultN = tr2.ReadLine();
} //tr2.Dispose() inserted automatically here
...
}