Есть ли разница между & ldquo; throw & rdquo; и & ldquo; throw ex & rdquo ;?

"12".match(/^(\d)+$/)      # true
"1.2".match(/^(\d)+$/)     # false
"dfs2".match(/^(\d)+$/)    # false
"13422".match(/^(\d)+$/)   # true
395
задан Moes 25 October 2018 в 22:24
поделиться

4 ответа

Да, есть разница;

  • throw ex сбрасывает трассировку стека (поэтому ваши ошибки будут кажется, происходит из HandleException )
  • throw нет - первоначальный нарушитель будет сохранен.

     static void Main (string [] args)
    {
     пытаться
     {
     Method2 ();
     }
     поймать (исключение ex)
     {
     Console.Write (ex.StackTrace.ToString ());
     Console.ReadKey ();
     }
    }
    
    приватная статическая пустота Method2 ()
    {
     пытаться
     {
     Method1 ();
     }
     поймать (исключение ex)
     {
     // throw ex сбрасывает трассировку стека, полученную из метода 1, и передает ее вызывающей стороне (Main)
     бросить экс;
     }
    }
    
    закрытая статическая пустота Method1 ()
    {
     пытаться
     {
     бросить новое исключение («Inside Method1»);
     }
     поймать (исключение)
     {
     бросить;
     }
    }
    
651
ответ дан 22 November 2019 в 23:28
поделиться

В функции «Публикация ...» нет ничего волшебного, что вы не могли бы воссоздать самостоятельно, тем более что вы используете сетевой файловый ресурс.

По сути, все, что он делает, это копирует ваши файлы из одного места в другое. Используя NAnt, вы можете выполнить это с помощью задачи copy или использовать задачу exec для вызова xcopy Если вы используете инструмент сборки, отличный от Нет, я уверен, что есть поддержка подобных задач.

Если вы хотите оставить исходный код и отладочную информацию позади, вы можете исключить файлы, заканчивающиеся на .cs или .pdb. И NAnt copy, и xcopy предоставляют простые способы сделать это.

не номер строки вызова DivByZero () , что, вероятно, имеет смысл сейчас, когда я немного об этом думаю ...

Вывод в режиме выпуска

Исключение 1:

at ConsoleAppBasics.Program.ThrowException1()
at ConsoleAppBasics.Program.Main(String[] args)

Исключение 2:

at ConsoleAppBasics.Program.ThrowException2()
at ConsoleAppBasics.Program.Main(String[] args)

Поддерживает ли исходный stackTrace только в режиме отладки?

93
ответ дан 22 November 2019 в 23:28
поделиться

Нет, это приведет к тому, что у исключения будет другая трассировка стека. Только использование броска без какого-либо исключения в обработчике catch оставит трассировку стека без изменений.

Возможно, вы захотите вернуть логическое значение из HandleException, независимо от того, будет ли исключение переброшено или нет.

4
ответ дан 22 November 2019 в 23:28
поделиться

Когда вы бросаете ex, то выброшенное исключение становится «оригинальным». Таким образом, вся предыдущая трассировка стека не будет.

Если вы бросите, исключение просто пойдет по линии , и вы получите полную трассировку стека.

4
ответ дан 22 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: