搜索
简帛阁>技术文章>C#异常处理中try和catch语句及finally语句的用法示例

C#异常处理中try和catch语句及finally语句的用法示例

使用 try/catch 处理异常
try-catch 块的用途是捕捉和处理工作代码所生成的异常。 有些异常可以在 catch 块中处理,解决问题后不会再次引发异常;但更多情况下,您唯一能做的是确保引发适当的异常。
示例
在此示例中,IndexOutOfRangeException 不是最适当的异常:对本方法而言 ArgumentOutOfRangeException 更恰当些,因为错误是由调用方传入的 index 参数导致的。

class TestTryCatch
{
  static int GetInt(int[] array, int index)
  {
    try
    {
      return array[index];
    }
    catch (System.IndexOutOfRangeException e) // CS0168
    {
      System.Console.WriteLine(e.Message);
      // Set IndexOutOfRangeException to the new exception's InnerException.
      throw new System.ArgumentOutOfRangeException("index parameter is out of range.", e);
    }
  }
}


注释
导致异常的代码被括在 try 块中。 在其后面紧接着添加一个 catch 语句,以便在 IndexOutOfRangeException 发生时对其进行处理。 catch 块处理 IndexOutOfRangeException,并引发更适当的 ArgumentOutOfRangeException 异常。 为给调用方提供尽可能多的信息,应考虑将原始异常指定为新异常的 InnerException。 因为 InnerException 属性是只读,所以必须在新异常的构造函数中为其赋值。


使用 finally 执行清理代码
finally 语句的目的是确保即使在引发异常的情况下也能立即进行必要的对象(通常是保存外部资源的对象)清理。此类清理功能的一个示例是在使用后立即对 FileStream 调用 Close,而不是等待公共语言运行时对该对象进行垃圾回收,如下所示:

static void CodeWithoutCleanup()
{
  System.IO.FileStream file = null;
  System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\file.txt");

  file = fileInfo.OpenWrite();
  file.WriteByte(0xF);

  file.Close();
}

为了将上面的代码转换为 try-catch-finally 语句,需要将清理代码与工作代码分开,如下所示。

static void CodeWithCleanup()
{
  System.IO.FileStream file = null;
  System.IO.FileInfo fileInfo = null;

  try
  {
    fileInfo = new System.IO.FileInfo("C:\\file.txt");

    file = fileInfo.OpenWrite();
    file.WriteByte(0xF);
  }
  catch(System.UnauthorizedAccessException e)
  {
    System.Console.WriteLine(e.Message);
  }
  finally
  {
    if (file != null)
    {
      file.Close();
    }
  }
}

因为在 OpenWrite() 调用前,try 块内随时都有可能发生异常,OpenWrite() 调用本身也有可能失败,所以我们无法保证该文件在我们尝试关闭它时处于打开状态。 finally 块添加了一项检查,以确保在调用 Close 方法前,FileStream 对象不为 null。如果没有 null 检查,finally 块可能引发自身的 NullReferenceException,但是应当尽可能避免在 finally 块中引发异常。
在 finally 块中关闭数据库连接是另一个不错的选择。因为有时候数据库服务器允许的连接数是有限的,所以应尽快关闭数据库连接。在由于引发了异常而无法关闭连接的情况下,使用 finally 块也是比等待垃圾回收更好的一种选择。

使用try/catch处理异常trycatch块用途是捕捉处理工作代码所生成异常。有些异常可以在catch处理,解决问题后不会再次引发异常;但更多情况下,您唯一能做是确保引发适当异常。示
要在C++实现异常处理,你可以使用try、throwcatch表达式。首先,使用try块将可能引发异常一个或多个语句封闭起来。throw表达式发出信号,异常条件(通常是错误)已在try发生
定义用法try/catch/finally语句用于处理代码可能出现错误信息。错误可能是语法错误,通常是程序员造成编码错误或错别字。也可能是拼写错误或语言缺少功能(可能由于浏览器差异)。tr
在前面所谓异常处理,即让一个程序运行时遇到自己无法处理错误时抛出一个异常,希望调用者可以发现处理问题异常处理基本思想是简化程序错误代码,为程序键壮性提供一个标准检测机制也许我们已经使用过异常
在前面所谓异常处理,即让一个程序运行时遇到自己无法处理错误时抛出一个异常,希望调用者可以发现处理问题异常处理基本思想是简化程序错误代码,为程序键壮性提供一个标准检测机制也许我们已经使用过异常
2种场景(1)try有return,finally没有return(注意会改变返回值情形);(2)try有return,finally有return;场景代码分析(idea亲测)场景一:1
异常英文单词是exception,字面翻译就是“意外、例外”意思,也就是非正常情况。事实上,异常本质上是程序上错误,包括程序逻辑错误系统错误。一前言java异常处理大家都不陌生,总的来说有下面
首先明确一点,就是不管怎样,finally一定会执行,即使程序有异常,并且在catchthorw了,finally还是会被执行。2当trycatch有return时,finally仍然执行。3
首先明确一点,就是不管怎样,finally一定会执行,即使程序有异常,并且在catchthorw了,finally还是会被执行。2当trycatch有return时,finally仍然执行。3
ava异常处理finally中的return会覆盖catch语句中的return语句throw语句,所以Java不建议在finally使用return语句此外finally中的throw语句