【发布时间】:2013-01-15 16:28:04
【问题描述】:
据我所知,您应该只在实际处理异常时才使用 try/catch,而不仅仅是报告和记录它然后使应用程序崩溃。否则,您最好只检查有意义的不同场景(例如,如果 sth==null)或者 - 如果您的目的只是记录异常并使应用程序崩溃 - 使用 AppDomain.UnhandledException。但这种情况总是如此吗?为什么?
假设以下方法,它接受一个数组并在执行一些数据库和文件系统操作后返回 MemoryStream。
MemoryStream Read (int[] IDs)
{
try
{
using (SqlConnection connection = new SqlConnection(connection_string))
{
connection.Open();
// a bunch of code executing SQL queries & constructing MemoryStream, which is returned at the end of the block
}
}
catch (Exception e)
{
// report the exception to the user & log it
throw; // pointles??
}
}
有多种情况可以被视为异常/不需要的行为,例如:
- 参数 (IDs[]) 为空,
- 未能建立 SQL 连接,
- 未能执行特定的 SQL 查询。
所有这些情况都被认为是异常的,如果您只想记录异常(然后崩溃),仍然将所有内容放在 try/catch 中可能是不好的做法 - 但为什么呢?在上述情况下,最好的处理行为是什么?完全避免 try/catch,使用 if 语句检查 null 引用(在这种情况下返回 null)并使用 AppDomain.UnhandledException 记录其他所有内容?使用 try/catch,但仍然使用 if 语句检查空引用(并在这种情况下返回)?还有什么?
【问题讨论】:
-
即使您觉得我的回答没有用,我建议您阅读我提供的链接。我相信您会发现它们非常宝贵!
-
@alan,感谢您的回答,我确实觉得它很有用,并且正在阅读链接。 =)
标签: c# .net exception-handling try-catch