例如
try
{
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//throw;
}
这是一般例外。如何知道使用哪一个以及何时使用?
答案 0 :(得分:4)
如何知道使用何时使用?
这取决于您在try
区块中尝试执行的操作。假设您使用SqlCommand
来检索某些记录,那么最好首先捕获SqlException
然后再Exception
捕获其他记录。
try
{
using(SqlCommand cmd = new SqlCommand(....))
{
//........
}
}
catch (SqlException se)
{
//logging etc.
}
catch (Exception ex)
{
//logging etc
}
请记住首先捕获特定的异常并转移到基础Exception
。至于你关于捕获哪个异常的问题,你无法确定它们,这就是为什么它们被称为异常,你只能相应地预测和捕获它们。
答案 1 :(得分:0)
您可以定义许多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.
}
答案 2 :(得分:0)
您希望在程序中使用结构化异常处理(SEH)。
首先,您必须注意,存在3种类型的错误:
所以你必须在可以创建异常的情况下在C#中使用SEH,但是在运行programm期间你无法做任何代码。在创建方法期间,如果方法无法执行请求任务时避免出现情况,则必须设置异常。在此过程中,你必须注意两个要点(如 Rihter 在他的一本书中写的那样):
首先,您必须了解可以创建什么类型的Exception。必须非常谨慎地选择此类型,为此您可以在FCL(Framework类库)中使用现有类型之一,但有时可能是这种情况,当您需要自己的异常类型时。例如,如果使用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
和ExceptionType1
,ExceptionType2
必须包含ExceptionType1
- 这样您就可以使用某些hierarhy捕获异常 - 否则 - 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;
}
此外,您必须了解如果您使用代码捕获异常 - 您知道它可以。所以你可以把东西带走。您必须以这种方式创建代码,try-catch-funally
的q-ty块正好是您的程序所需。
有关C#中的异常类的详细信息,您可以找到HERE。