C# 什么';处理方法异常的正确时间是什么时候?

C# 什么';处理方法异常的正确时间是什么时候?,c#,asp.net,exception,exception-handling,page-lifecycle,C#,Asp.net,Exception,Exception Handling,Page Lifecycle,我的问题与异常处理有关 例如,如果我有以下三种方法: Private void Method1() { //My code ... } void Page_Load() { if(!Page.IsPostBack) { Method1(); Method2(); Method3(); } } 我在页面加载事件中调用三个方法,如下所示: Private void Method1() { //My code ...

我的问题与异常处理有关

例如,如果我有以下三种方法:

Private void Method1()
{
   //My code ...
}
void Page_Load()
{
  if(!Page.IsPostBack)
    {

       Method1();
       Method2();
       Method3();
    }
}



我在页面加载事件中调用三个方法,如下所示:

Private void Method1()
{
   //My code ...
}
void Page_Load()
{
  if(!Page.IsPostBack)
    {

       Method1();
       Method2();
       Method3();
    }
}

对于异常处理,这里的最佳实践是什么。
[Try and Catch]
每个方法都有例外,我的意思是在方法实现中。或者在页面加载中用一个
[Try Catch]
包装三个方法的调用…

在我看来,您应该在所有方法中都添加Try Catch。这样,您将能够更轻松地跟踪错误

但据我所知,只有在处理外部资源时才使用try-catch是最佳实践。(即文件IO、数据库通信等) 这是因为try-catch会带来一些开销

(投票否决时,请告诉我原因。这对我很有帮助,但也对提出问题的人很有帮助。)


编辑:查看我的最后一条评论。正如其他人所指出的,到处设置try/catch块根本没有意义

在我看来,你应该在所有方法中加入try-catch。这样,您将能够更轻松地跟踪错误

但据我所知,只有在处理外部资源时才使用try-catch是最佳实践。(即文件IO、数据库通信等) 这是因为try-catch会带来一些开销

(投票否决时,请告诉我原因。这对我很有帮助,但也对提出问题的人很有帮助。)


编辑:查看我的最后一条评论。正如其他人所指出的,到处设置try/catch块根本没有意义

看看我的答案。这是一个相当广泛的课题,但我总结了一些需要考虑的事情。这绝对不是这个问题的最终答案,但我总结了5点可能有助于你做出决定。

看看我的答案。这是一个相当广泛的课题,但我总结了一些需要考虑的事情。这并不是最终的答案,但我总结了5点可能有助于你的决定。

如果你知道如何从异常中恢复,你应该只
尝试{}捕获{}

在所有情况下,使用全局/top
try{}catch{}
/error处理程序记录错误都是一种良好的做法


通常,如果您不知道如何处理异常,请不要捕获它。也不要接受这样的异常-尽量优雅地关闭应用程序/线程。

只有知道如何从异常中恢复时,才应该
尝试{}catch{}

在所有情况下,使用全局/top
try{}catch{}
/error处理程序记录错误都是一种良好的做法


通常,如果您不知道如何处理异常,请不要捕获它。也不要接受此类异常-尽量优雅地关闭应用程序/线程。

这取决于您希望在异常处理程序中执行的操作。如果您想让用户知道出了什么问题,那么需要为每个异常处理程序分别设置异常处理程序。如果你只是想要一个概括的“出了问题,我不会告诉你是什么”,一个就足够了。你应该尽快捕获并记录异常。你在做什么取决于上下文。即使
Method1
引发异常,您也可能希望调用
Method2
。您可能希望提供一个自定义错误页并捕获中传递的所有异常。这取决于您希望在异常处理程序中执行的操作。如果您想让用户知道出了什么问题,那么需要为每个异常处理程序分别设置异常处理程序。如果你只是想要一个概括的“出了问题,我不会告诉你是什么”,一个就足够了。你应该尽快捕获并记录异常。你在做什么取决于上下文。即使
Method1
引发异常,您也可能希望调用
Method2
。您可能希望提供自定义错误页并捕获中传递的所有异常。是的,只尝试捕获代码无法捕获的内容。例如,如果您担心可能会被零除,请先检查操作数的值,不要在其周围打上try-catch块。是否到处尝试catch?当有一个OutOfMemoryException时会怎样?也能抓住它吗?在大多数方法中,
尝试
/
抓住
都是有益的。随着应用程序变得越来越复杂,控制异常冒泡变得越来越困难。因此在这方面,@Rhapsody的帖子没有理由投反对票(+1)。
OutOfMemoryException
的示例说明了什么@Killercam——关键是在每段可执行代码周围放置catch块是毫无意义的。OOME的例子是关于试图抓住一切是徒劳的。Pokemon异常处理不是很好的做法。好的。谢谢我个人不这么做,但如果这样做可以简化异常处理,我就看不出有什么大问题。我会把你说的话带到黑板上,多读一点。再次感谢。是的,只尝试捕捉代码无法捕捉的东西。例如,如果您担心可能会被零除,请先检查操作数的值,不要在其周围打上try-catch块。是否到处尝试catch?当有一个OutOfMemoryException时会怎样?也能抓住它吗?在大多数方法中,
尝试
/
抓住
都是有益的。随着应用程序变得越来越复杂,控制异常冒泡变得越来越困难。因此在这方面,@Rhapsody的帖子没有理由投反对票(+1)。
OutOfMemoryException
的示例说明了什么@Killercam——关键是在每段可执行代码周围放置catch块是毫无意义的。OOME的例子是关于试图抓住一切是徒劳的。口袋妖怪