例如
try
{
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//throw;
}
这是一般的例外。如何知道使用哪一个以及何时使用?
如何知道使用哪个以及何时使用?
这取决于你想在你的try
街区做什么。假设您正在使用SqlCommand
检索一些记录,那么最好先捕获SqlException
然后再Exception
捕获其他记录。
try
{
using(SqlCommand cmd = new SqlCommand(....))
{
//........
}
}
catch (SqlException se)
{
//logging etc.
}
catch (Exception ex)
{
//logging etc
}
只需记住首先捕获特定异常并转移到 base Exception
。至于您关于要捕获哪个异常的问题,您无法确定它们,这就是它们被称为异常的原因,您只能相应地预测和捕获。
您想在程序中使用结构化异常处理 (SEH)。
首先您必须注意,存在 3 种类型的错误:
所以你必须在 C# 中使用 SEH,只是在可以创建异常的情况下,但是在程序运行期间你不能做任何事情。在创建方法期间,如果您的方法必须放置异常,以避免方法无法执行请求的任务的情况。在此过程中,您必须注意两个要点(正如Rihter在他的一本书中所写):
首先你必须了解可以创建什么类型的异常。这种类型必须非常小心地选择,为此您可以使用 FCL(框架类库)中现有的类型之一,但有时可能是这种情况,当您需要自己的异常类型时。例如,如果您使用 Input-Otput 类,您可以使用以下异常类型之一 - System.IO.DirectoryNotFoundException, System.IO.DriveNotFoundException, System.IO.EndOfStreamException, System.IO.FileLoadException, System.IO.FileNotFoundException, System.IO.PathTooLongException, System.IO.PipeException
。
其次,您必须选择将什么消息发送到异常构造函数。意味着您必须能够从您的方法中找到详细信息——创建此异常的时间和原因。
同样为了创建异常,您可以使用下一个 shablon
void SomeMEthod (){
try
{
//your code to do
}
catch (ExceptionType1) //here put code with Exception 1
{
// you can add some specific code here for working with your exception
}
catch (ExceptionType2) //here put code with Exception 2
{
// you can add some specific code here for working with your exception
}
catch (EXCEPTION) //here put code with rest types of Exception
{
// you can add some specific code here for working with your exception
}
finally
{
//here put code that allow you to free your resourses
//NOTE: this code will be launched always!
}
//here you can placed code, that will be launched if no Exception will be found
}
另请注意,EXCEPTION
必须包含ExceptionType2
and ExceptionType1
,并且ExceptionType2
必须包含ExceptionType1
- 这允许您使用一些层次结构捕获异常 - 否则 -EXCEPTION
将捕获所有异常。
您还可以thow
在catch
块中添加关键字 - 与现有异常一起工作
catch (EXCEPTION) //here put code with rest types of Exception
{
// you can add some specific code here for working with your exception
throw;
}
此外,您必须了解,如果您使用代码来捕获异常 - 您知道它可以。所以你可以做一些东西把它拿走。您必须以这种方式创建您的代码,该 q-ty 块try-catch-funally
正是您的程序所需的。
有关 C# 中异常类的详细信息,您可以在此处找到。
您可以定义许多 catch 块。喜欢:
try
{
var result = 8 / 0;
}
catch (DivideByZeroException ex)
{
// Here, a more specific exception is caught.
}
catch (Exception ex)
{
// Otherwise, you'll get the exception here.
}