多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 如何:使用 try/catch 处理异常(C# 编程指南) [try-catch](https://msdn.microsoft.com/zh-cn/library/0yd65esw.aspx) 块的用途是捕捉和处理工作代码所生成的异常。 有些异常可以在 catch 块中处理,解决问题后不会再次引发异常;但更多情况下,您唯一能做的是确保引发适当的异常。 ## 示例 <a id="exampleToggle"></a> 在此示例中,[IndexOutOfRangeException](https://msdn.microsoft.com/zh-cn/library/system.indexoutofrangeexception.aspx) 不是最适当的异常:对本方法而言 [ArgumentOutOfRangeException](https://msdn.microsoft.com/zh-cn/library/system.argumentoutofrangeexception.aspx) 更恰当些,因为错误是由调用方传入的 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); } } } ``` ## 注释 <a id="sectionToggle0"></a> 导致异常的代码被括在 try 块中。 在其后面紧接着添加一个 catch 语句,以便在 IndexOutOfRangeException 发生时对其进行处理。 catch 块处理 IndexOutOfRangeException,并引发更适当的 ArgumentOutOfRangeException 异常。 为给调用方提供尽可能多的信息,应考虑将原始异常指定为新异常的 [InnerException](https://msdn.microsoft.com/zh-cn/library/system.exception.innerexception.aspx)。 因为 [InnerException](https://msdn.microsoft.com/zh-cn/library/system.exception.innerexception.aspx) 属性是[只读](https://msdn.microsoft.com/zh-cn/library/acdd6hb7.aspx),所以必须在新异常的构造函数中为其赋值。 ## 请参见 <a id="seeAlsoToggle"></a> #### 参考 [异常和异常处理(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/ms173160.aspx) [异常处理(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/ms173162.aspx) #### 概念 [C# 编程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx)