如何处理不使用尝试捕捉异常?(How to handle exception without usi

2019-09-16 17:32发布

using (SqlConnection con = new SqlConnection())
{
     try
     {
          con.Open();
     }
     catch (Exception ex)
     {
          MessageBox.Show(ex.Message);
     }
}

这工作得很好。 但我想知道我们能处理异常,而无需使用try catch像一些事情if else ? 抑或是mendetory使用try catch

Answer 1:

有没有其他的机制来处理比尝试捕捉其他异常。 这听起来像你想要的东西,像

if(connection.DidAnErrorOccur)

但是,这并不存在。



Answer 2:

唯一的办法是检查所有将返回一个错误的条件。 你本来也应该这样做。 try / catch语句是昂贵的。 尝试catch应该是最后的手段,在它周围有没有办法达到这个目的。



Answer 3:

我可以给你最好的选择是ELMAH。 http://code.google.com/p/elmah/它会处理所有未捕获的错误并记录它们。 从那里,我会建议固定所述错误或捕捉你所期望并不仅仅是赶上任何可能发生的错误的特定错误。 这是最好这样做可以解决潜在的问题,而不是简单地跳过代码,因为发生了异常。



Answer 4:

OK,你可以在Global.asax实施日的Application_Error,这种方法是防守中的错误的第一线,是所有应用

http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx

例如用于Default.aspx的特定页面,则可以实现Page_Error事件

http://msdn.microsoft.com/en-us/library/ed577840%28v=vs.100%29.aspx

如果你是在MVC这样你就可以实现在您想要每一个控制器的onException的(ExceptionContext filterContext)工作,当出现未处理的异常调用此方法。

http://devproconnections.com/aspnet-mvc/aspnet-mvc-tutorial-handling-errors-and-exceptions

或者你可以实现你的错误属性附加伤害

https://www.simple-talk.com/dotnet/asp.net/handling-errors-effectively-in-asp.net-mvc/

对于另一只手,也许你可以使用assert语句 ,这个你可以计算一个条件

http://msdn.microsoft.com/en-us/library/ttcc4x86.aspx



Answer 5:

TEJS'答案是正确的,我相信没有其他的机制来处理错误。

你可以,但是,处理更具体的错误。 您也可以声明尝试捕捉外面的变量,看它是否成功。

例:

using (SqlConnection con = new SqlConnection())
{
     bool sqlErrorOccurred;

     try
     {
         con.Open();
         sqlErrorOccurred = false;
     }
     catch (SqlException ex)
     {
          sqlErrorOccurred = true;
     }

     if(sqlErrorOccurred)
     {
         MessageBox.Show("A Sql Exception Occurred");
     }
}


Answer 6:

以上这些问题的答案是正确的。 然而,需要注意的一个额外的事情是,它可以建立一个全球性的异常处理程序。 这不解决防守编码的需要如前所述。 但是,如果有所有的异常需要处理(例如,记录错误)的关注,那么这种方法是非常有益的。



Answer 7:

我建立一个使用实时流数据和需求,因此,处理所有事情都非常空闲时可能出现的错误的系统。 我使用的API背透不过来连接一个名为“错误”的方法,以异常的程序传递错误。 那么这种方法可能会引发错误,但是这是有问题的,因为我看不到如何把我的整个程序完全在try-catch块是一个好主意。

因此,要解决它,我将建立一个事件处理程序在我的程序,这样就可以与任何错误在那个时间点被抛出应对的主要部分触发事件。

例如:

在主类:

private void Error(object sender, EventArgs e) {

    Exception ex = sender as Exception;

    Console.WriteLine("Error: " + ex); // Or whatever you want to do with the exception

    // You could even add this if you want to then use the try -catch sequence (which 
    // makes the exception easier to parse and also enables you to stop the program
    // with unhandled exceptions if it's something catastrophic:

    try {

        throw ex;
    } catch (put.your.exception.detail.here) {

        // do stuff
   } finally {

       // do other stuff
   }
}

(在从API接收错误的类):

class Foo {
    public event EventHandler ThrowError;

    protected virtual void OnError(Object src, EventArgs e) {

        if (ThrowError != null) {

            ThrowError(src, e);
        }
    }

    private virtual void error(Exception e) {

        OnError(e, EventArgs.Empty);
    }
}


文章来源: How to handle exception without using try catch?