using (SqlConnection con = new SqlConnection())
{
try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这很好用。但我想知道我们可以处理异常而不使用try catch
之类的东西if else
吗?或使用try catch
答案 0 :(得分:5)
除了try catch之外,没有其他机制可以处理异常。听起来你想要像
这样的东西if(connection.DidAnErrorOccur)
但这不存在。
答案 1 :(得分:3)
唯一的方法是检查会返回错误的所有条件。无论如何你应该这样做。尝试/捕获是昂贵的。尝试捕获应该是最后的手段,并且没有办法解决它。
答案 2 :(得分:2)
我能给你的最佳选择是艾玛。 http://code.google.com/p/elmah/ 它将处理所有未被捕获的错误并记录它们。从那里我建议修复所述错误或捕获您期望的特定错误,而不是捕获可能发生的任何错误。最好这样做可以解决潜在问题,而不是简单地跳过代码,因为发生了异常。
答案 3 :(得分:2)
好的,你可以在global.asax 中实现de 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/
另一方面也许您可以使用断言语句,这样就可以评估条件
答案 4 :(得分:1)
Tejs的回答是正确的,我相信没有其他机制来处理错误。
但是,您可以处理更具体的错误。您还可以在try catch之外声明变量,看它是否成功。
示例:
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");
}
}
答案 5 :(得分:0)
以上答案是正确的。但是,需要注意的另一件事是可以设置全局异常处理程序。这并不能解决前面提到的防御性编码的需要。但是,如果担心需要处理所有异常(例如,记录错误),那么这种方法可能非常有用。
答案 6 :(得分:0)
我正在构建一个使用实时流数据的系统,因此需要处理当其他所有内容都空闲时可能发生的错误。我正在使用的API通过名为“error”的方法将错误传递回程序,附带例外。然后这个方法可以抛出错误,但这是有问题的,因为我无法看到如何将我的整个程序完全放在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);
}
}
答案 7 :(得分:0)
在.NET core 3.1(或更早版本?)中,您可以为未处理的异常设置全局捕获器。但是,此后该APP将不会继续运行。
这里是一个例子: