gpt4 book ai didi

c# - 如何在 CSharp 的类级别捕获所有异常?

转载 作者:太空狗 更新时间:2023-10-29 18:29:06 24 4
gpt4 key购买 nike

我有一个类:

class SampleRepositoryClass
{
void MethodA()
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}

void MethodB(int a, int b)
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}

List<int> MethodC(int userId)
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
}

在上面的示例中,您可以看到在每个方法(MethodA、MethodB、MethodC)中都有 try...catch block 来记录错误,然后抛出到更高级别。

想象一下,当我的 Repository 类可能有一百多个方法并且在每个方法中我都有 try...catch block ,即使只有一行代码。

现在,我的目的是减少这些重复的异常记录代码,并在类级别而不是方法级别记录所有异常。

最佳答案

为什么要重新发明轮子,既然有免费 Post Sharp Express 这样的东西。就像添加 PostSharp.dll 作为对项目的引用一样简单。这样做之后,您的存储库将如下所示:

[Serializable]
class ExceptionWrapper : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
LogError(args.Exception);
//throw args.Exception;
}
}

[ExceptionWrapper]
class SampleRepositoryClass
{
public void MethodA()
{
//Do Something
}

void MethodB(int a, int b)
{
//Do Something
}

List<int> MethodC(int userId)
{
//Do Something
}
}

在类上添加 ExceptionWrapper 属性,确保所有属性和方法都封装在 try/catch block 中。 catch 中的代码将是您放入 ExceptionWrapper 中的覆盖函数 OnException() 中的代码。

您也不需要编写代码来重新抛出。如果提供了正确的流程行为,也可以自动重新抛出异常。请检查文档。

关于c# - 如何在 CSharp 的类级别捕获所有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22376964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com