捕获异常,执行clean up代码。

解决方案 »

  1.   

    是用来做异常处理的。比如
    try
    {
     如正确
       .......;
    }
    catch
    {
     出错时
      ........;
    }
      

  2.   

    try {
        // 可能会throw出异常的若干语句
    } catch (/* 被throw出异常 */) {
        // 捕捉上面语句throw出的异常,并处理
    } finally {
        // 不管有没有异常发生都必须做的语句
    }
      

  3.   

    不然的话你的程序会把使用它的人吓死,而且根本不能正常运行,当然,如果你的程序不是完美无缺到任何bug都没有的话
      

  4.   

    try-catch 语句由一个 try 块和其后所跟的一个或多个 catch 子句(为不同的异常指定处理程序)构成。此语句会采用下列形式之一:
    try try-block 
    catch (exception-declaration-1) catch-block-1 
    catch (exception-declaration-2) catch-block-2 
    ...
    try try-block catch catch-block
    其中: 
    try-block 
    包含应引发异常的代码段。 
    exception-declaration, exception-declaration-1, exception-declaration-2 
    异常对象声明。 
    catch-block, catch-block-1, catch-block-2 
    包含异常处理程序。 
    备注
    try-block 包含可能导致异常的保护代码块。该块一直执行到引发异常或成功完成为止。例如,下列转换 null 对象的尝试引发 NullReferenceException 异常:
    object o2 = null;
    try
    {
       int i2 = (int) o2;   // Error
    }
    catch 子句使用时可以不带任何参数,在这种情况下它捕获任何类型的异常,并被称为一般 catch 子句。它还可以采用从 System.Exception 派生的对象参数,在这种情况下它处理特定的异常。例如:
    catch (InvalidCastException e) 
    {
    }
    在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。这种情况下 catch 子句的顺序很重要,因为会按顺序检查 catch 子句。将先捕获特定程度较高的异常,而不是特定程度较小的异常。
    在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常。例如:
    catch (InvalidCastException e) 
    {
       throw (e);   // Rethrowing exception e
    }
    如果要再次引发当前由无参数的 catch 子句处理的异常,则使用不带参数的 throw 语句。例如:
    catch
    {
       throw;
    }
    请在 try 块内部只初始化其中声明的变量;否则,完成该块的执行前可能发生异常。例如,在下面的代码示例中,变量 x 在 try 块内初始化。试图在 Write(x) 语句中的 try 块外部使用此变量时将生成编译器错误:使用了未赋值的局部变量。
    public static void Main() 
    {
       int x;
       try 
       {
          x = 123;   //   Don't do that.
          // ...
       }
       catch
       {
          // ...
       }
       Console.Write(x);   // Error: Use of unassigned local variable 'x'.
    }
    有关 catch 的更多信息,请参见 try-catch-finally。
    示例
    在此例中,try 块包含对可能导致异常的 MyFn() 方法的调用。catch 子句包含仅在屏幕上显示消息的异常处理程序。当从 MyFn() 内部调用 throw 语句时,系统查找 catch 语句并显示 Exception caught 消息。
    // Rethrowing exceptions:
    using System;
    class MyClass 
    {
       public static void Main() 
       {
          MyClass x = new MyClass();
          try 
          {
             string s = null;
             x.MyFn(s);
          }      catch (Exception e)
          {
             Console.WriteLine("{0} Exception caught.", e);
          }
       }   public void MyFn(string s) 
       {
          if (s == null)
             throw(new ArgumentNullException());
       }   
    }
    输出
    发生以下异常:
    System.ArgumentNullException
    示例
    此例使用了两个 catch 语句。最先出现的最特定的异常被捕获。
    // Ordering catch clauses
    using System;
    class MyClass 
    {
       public static void Main() 
       {
          MyClass x = new MyClass();
          try 
          {
             string s = null;
             x.MyFn(s);
          }      // Most specific:
          catch (ArgumentNullException e) 
          {
             Console.WriteLine("{0} First exception caught.", e);
          }      // Least specific:
          catch (Exception e) 
          {
             Console.WriteLine("{0} Second exception caught.", e);
          }   }   public void MyFn(string s) 
       {
          if (s == null) 
             throw new ArgumentNullException();
       }   
    }
    输出
    发生以下异常:
    System.ArgumentNullException
    在前面的示例中,如果从特定程度最小的 catch 子句开始,您将收到此错误信息:
    A previous catch clause already catches all exceptions of this or a super type ('System.Exception')
    但是,若要捕获特定程度最小的异常,请使用下面的语句替换 throw 语句:
    throw new Exception();
      

  5.   

    try-finally请参见
    C# 关键字 | 与 C++ 比较 | 异常处理语句 | throw | try-catch | 引发异常 | C. 语法
    finally 块用于清除在 try 块中分配的任何资源。控制总是传递给 finally 块,与 try 块的存在方式无关。此语句的形式如下:try try-block finally finally-block
    其中: try-block 
    包含应引发异常的代码段。 
    finally-block 
    包含异常处理程序和清理代码。 
    备注
    catch 用于处理语句块中出现的异常,而 finally 用于保证代码语句块的执行,与前面的 try 块的执行方式无关。示例
    在此例中,有一个导致异常的无效转换语句。当运行程序时,您收到一条运行时错误信息,但 finally 子句仍继续执行并显示输出。// try-finally
    using System;
    public class TestTryFinally 
    {
       public static void Main() 
       {
          int i = 123;
          string s = "Some string";
          object o = s;      try 
          {
             // Invalid conversion; o contains a string not an int
             i = (int) o;   
          }      finally 
          {
             Console.Write("i = {0}", i);
          }         
       }
    }
    输出
    发生以下异常:System.InvalidCastException
    尽管捕捉了异常,但仍会执行包括在 finally 块中的输出语句,即:i = 123
    有关 finally 块的更多信息,请参见 try-catch-finally。
      

  6.   

    try-catch-finally请参见
    C# 关键字 | 与 C++ 比较 | 异常处理语句 | throw | 引发异常 | C. 语法一起使用 catch 和 finally 的通常用法是在 try 块中获取并使用资源,在 catch 块中处理异常情况,在 finally 块中释放资源。
    示例
    // try-catch-finally
    using System;
    public class EHClass 
    {
       public static void Main () 
       {
          try 
          {
             Console.WriteLine("Executing the try statement.");
             throw new NullReferenceException();
          }      catch(NullReferenceException e) 
          {
             Console.WriteLine("{0} Caught exception #1.", e); 
          }      catch 
          {
             Console.WriteLine("Caught exception #2.");
          }      finally 
          {
             Console.WriteLine("Executing finally block.");
          }
       }
    }
    输出
    Executing the try statement.
    System.NullReferenceException: Attempted to dereference a null object reference.
       at EHClass.Main() Caught exception #1.
    Executing finally block.