Использование анонимных методов для регистрации исключений - PullRequest
0 голосов
/ 04 июня 2018

В наших приложениях WinForm мы часто имеем следующий блок try / catch в обработчиках событий элементов управления WinForm:

private void button_Click(object sender, EventArgs e)
      {
         try
         {
            <code goes here>
         }
         catch (Exception exception)
         {
            Logger.LogError(exception);
         }
      }

Недавно было предложено реализовать следующее:

private void button_Click(object sender, EventArgs e) =>
         this.TryCatchLogError(() =>
         {
            {
               <code goes here>;
            }
         });

Где

public static class Logger
{

    public static void LogError(Exception e)
    {
        <logs the exception>
    }

    public static void TryCatchLogError<T>(this T item, Action action)
    {
         try
         {
            action();
         }
         catch (Exception ex)
         {
            LogError(ex);
         }
     }
    }
}

Есть ли недостатки этого подхода?Например, проблемы с производительностью, безопасность потоков и т. Д. *

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Отслеживание стека может усложняться при использовании анонимных методов.

При использовании анонимного метода:

A first chance exception of type 'System.Exception' occurred in WinFormTest.exe
at WinFormTest.MainForm.<button1_Click>b__0() in c:\users\jayv\Documents\Tools\TestApplications\WinFormTest\MainForm.cs:line 19
at WinFormTest.Logger.TryCatchLogError[T](T item, Action action) in \\smbcgroup.com\dfs\users\jvarsani\Documents\Tools\TestApplications\WinFormTest\MainForm.cs:line 49

Без анонимного метода:

A first chance exception of type 'System.Exception' occurred in WinFormTest.exe
at WinFormTest.MainForm.button2_Click(Object sender, EventArgs e) in c:\users\jayv\Documents\Tools\TestApplications\WinFormTest\MainForm.cs:line 28

Анонимный метод включает в себя.<button1_Click>b__0(), что даже опытным людям, возможно, придется остановиться и задуматься на секунду.Кроме этого, все важные детали для номеров строк, имен методов и файлов все есть.

Сказав это, мы используем стиль метода Anonymous, когда дело доходит до отображения диалога прогресса или изменения курсора сПо умолчанию занят

0 голосов
/ 04 июня 2018

Они идентичны по функциям, и разница в производительности будет незначительной.Хотя в стиле, первое кажется более читаемым и гибким.Читается в этом очень ясно, что вы делаете.Гибкость в том, что вы можете добавить дополнительную очистку в блоке catch, если это необходимо для тех немногих методов, которые могут потребовать сделать что-то дополнительное.Второй подход более последовательный.Я предпочел бы первое - но это дело вкуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...