Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将特定操作附加到代码的特定部分_C#_Try Catch - Fatal编程技术网

C# 将特定操作附加到代码的特定部分

C# 将特定操作附加到代码的特定部分,c#,try-catch,C#,Try Catch,我有一个新的应用程序,它包含大量的try-catch块。我感兴趣的是,是否可以编写代码,以某种方式将saveexceptionindabase方法附加到我在应用程序中使用的每个catch-块 try { //some actions } catch(exception e) { SaveExceptionInDatabase(e,DateTime.now(),CurrentUser); ShowFriendlyNotification(); } 我认为从我的应用程序中轻松删

我有一个新的应用程序,它包含大量的
try-catch
块。我感兴趣的是,是否可以编写代码,以某种方式将
saveexceptionindabase
方法附加到我在应用程序中使用的每个
catch
-块

try
{
    //some actions
}
catch(exception e)
{
   SaveExceptionInDatabase(e,DateTime.now(),CurrentUser);
   ShowFriendlyNotification();
}
我认为从我的应用程序中轻松删除bug会很有帮助,因为我已经多次注意到,在抛出异常之后,再次尝试执行相同的操作会成功

编辑:


我正在将WPF与Caliburn.Micro一起使用。您可以使用以下内容:

private void HandleDbException(Action action)
{
    try
    {
        action();
    }
    catch (Exception e)
    {
       SaveExceptionInDatabase(e, DateTime.now(), CurrentUser);
       ShowFriendlyNotification();
    }
}
然后

HandleDbException(() => 
{
    //some actions1
});


HandleDbException(() => 
{
    //some actions2
});

...

它不会将该模式应用于代码中的每个try/catch块,但至少可以避免重复catch块。

您可以使用以下方法:

private void HandleDbException(Action action)
{
    try
    {
        action();
    }
    catch (Exception e)
    {
       SaveExceptionInDatabase(e, DateTime.now(), CurrentUser);
       ShowFriendlyNotification();
    }
}
然后

HandleDbException(() => 
{
    //some actions1
});


HandleDbException(() => 
{
    //some actions2
});

...

它不会将模式应用于代码中的每个try/catch块,但至少可以避免重复catch块。

您可以使用PostSharp并处理异常。下面是一些相关的文章,展示了如何做到这一点。这个方法看起来很酷,因为您可以只向类添加一个属性,然后处理异常

[DatabaseExceptionWrapper]

您可以使用PostSharp并处理异常。下面是一些相关的文章,展示了如何做到这一点。这个方法看起来很酷,因为您可以只向类添加一个属性,然后处理异常

[DatabaseExceptionWrapper]

这最好由常规异常记录器处理。您没有提到您正在使用的框架,但是几乎所有的框架都有相应的模式。您通常捕获要处理的异常,因此不需要记录它们。如果执行两次操作修复了一些问题,那么添加重试逻辑。我感兴趣的是是否可以通过编程方式执行。如果我以后决定更改此方法的参数数量,我将能够在几分钟内完成。这最好由常规异常记录器处理。您没有提到您正在使用的框架,但是几乎所有的框架都有相应的模式。您通常捕获要处理的异常,因此不需要记录它们。如果执行两次操作修复了一些问题,那么添加重试逻辑。我感兴趣的是是否可以通过编程方式执行。如果我以后决定更改此方法的参数数量,我将能够在几分钟内完成。