C#异常处理是一种编程技术,它可以帮助我们处理程序中可能出现的错误。当发生错误时,C#异常处理机制会抛出一个异常对象,这个对象包含了关于错误的信息。
C#异常处理机制使用try-catch-finally块来实现。try块用于定义要执行的代码,catch块用于捕获并处理异常,finally块用于执行在try或catch块之后必须执行的代码。
C#中还有一个throw关键字,它可以用来显式地抛出一个异常。throw关键字可以在catch块中使用,也可以在方法中使用,以便将异常传递到调用者。
try { // 要执行的代码 } catch (Exception ex) { // 处理异常 } finally { // 在try或catch之后必须执行的代码 }
许多类封装了非托管资源。
这些类实现 System.IDisposable
,它定义了一个名为Dispose的单一无参数方法来清理这些资源。
using语句提供了一个优雅的语法,用于在finally块中的IDisposable
对象上调用Dispose。
如下:
using (StreamReader reader = File.OpenText ("file.txt")) { ... }
等效于:
StreamReader reader = File.OpenText ("file.txt"); try { ... } finally { if (reader != null) ((IDisposable)reader).Dispose(); }
异常可以由运行时或用户代码抛出。
在这个例子中,Display将抛出System.ArgumentNullException
:
class Main { static void Display (string name) { if (name == null){ throw new ArgumentNullException ("name"); } Console.WriteLine (name); } static void Main() { try { Display (null); } catch (ArgumentNullException ex) { Console.WriteLine ("Caught the exception"); } } }
您可以捕获并重新抛出异常,如下所示:
try { ... } catch (Exception ex){ // Log error ... throw; // Rethrow same exception }
System.Exception的最重要的属性如下:
以下异常类型广泛用于整个CLR和.NET Framework。
System.ArgumentException
System.ArgumentNullException
System.ArgumentOutOfRangeException
System.InvalidOperationException
System.NotSupportedException
System.NotImplementedException
System.ObjectDisposedException
int
类型定义两个其两个版本的Parse
方法:
public int Parse (string input); public bool TryParse (string input, out int returnValue);
如果解析失败, Parse
抛出异常; TryParse
返回 false
。
您可以通过 XXX
方法调用 TryXXX
方法来实现此模式,如下所示:
public return-type XXX (input-type input) { return-type returnValue; if (!TryXXX (input, out returnValue)) throw new YYYException (...) return returnValue; }
C# 通用委托委托类型可以包含通用类型参数。例如:public delegate T ConverterT (T arg);有了这个定义,我们可以编写一个适用于...
C#对象初始化任何可访问的字段或对象的属性可以在构造之后通过对象初始化器直接设置。例如,考虑下面的类:public class Person ...