0

例如

try
{
    Application.Exit();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
    //throw;
}

这是一般的例外。如何知道使用哪一个以及何时使用?

4

3 回答 3

4

如何知道使用哪个以及何时使用?

这取决于你想在你的try街区做什么。假设您正在使用SqlCommand检索一些记录,那么最好先捕获SqlException然后再Exception捕获其他记录。

try
{
    using(SqlCommand cmd = new SqlCommand(....))
    {
        //........
    }
}
catch (SqlException se)
{
    //logging etc. 
}
catch (Exception ex)
{
    //logging etc
}

只需记住首先捕获特定异常并转移到 base Exception。至于您关于要捕获哪个异常的问题,您无法确定它们,这就是它们被称为异常的原因,您只能相应地预测和捕获。

于 2013-11-14T16:00:19.863 回答
0

您想在程序中使用结构化异常处理 (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必须包含ExceptionType2and ExceptionType1,并且ExceptionType2必须包含ExceptionType1- 这允许您使用一些层次结构捕获异常 - 否则 -EXCEPTION将捕获所有异常。

您还可以thowcatch块中添加关键字 - 与现有异常一起工作

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# 中异常类的详细信息,您可以在此处找到。

于 2013-11-14T17:33:02.297 回答
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.
        }
于 2013-11-14T16:00:32.890 回答