c# - 传递异常的正确方法是什么? (C#)

标签 c# exception

<分区>

我想知道将异常从一种方法传递到另一种方法的正确方法是什么。

我正在做一个项目,它分为表示层(web)、业务层和逻辑层,错误(例如 SqlExceptions)需要沿着链向下传递,以便在出现问题时通知 web 层。

我见过 3 种基本方法:

try  
{  
    //error code
} 
catch (Exception ex)
{
    throw ex;
}

(简单地重新抛出)

try  
{  
    //error code
} 
catch (Exception ex)
{
    throw new MyCustomException();
}

(抛出一个自定义异常,这样就不会传递对数据提供者的依赖)
然后简单地

//error code

(什么都不做,让错误自己冒出来)

当然,catch block 中也会发生一些日志记录。

我更喜欢方法 3,而我的同事使用方法 1,但我们都无法真正提出原因。

使用每种方法的优点/缺点是什么?有没有更好的方法我不知道?是否有公认的最佳方式?

最佳答案

如果您什么都不做,您应该让它上层有人处理它。

你总是可以处理它的一部分(比如日志记录)并重新抛出它。您可以通过简单地发送 throw; 来重新抛出,而无需显式指定 ex 名称。

try
{

}
catch (Exception e)
{
    throw;
}

处理它的好处是你可以确保有某种机制可以通知你你有一个你不怀疑有错误的错误。

但是,在某些情况下,比方说第三方,您想让用户处理它,在这种情况下,您应该让它继续冒泡。

关于c# - 传递异常的正确方法是什么? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210841/

相关文章:

ruby-on-rails - rails 中的异常处理有什么好的最佳实践吗?

c# - 在ListView中强制显示滚动条?

c# - 如何使用 Principal Context 连接到 Active Directory?

c# - 我如何从数组和列表中创建带有键的字典?

c# - 我怎样才能抛出带有特定 HResult 的异常?

mysql - 通过hibernate javafx显示mysql异常

c# - 选择对象集合的列/字段并导出为 List<>

c# - 从 IMAP 获取邮件时获取加密字符串

android - 无法实例化 Activity ComponentInfo

java - 使用 throws 子句声明从未在方法主体中抛出的已检查异常