在程序运行期间如果发生错误,系统就会发生异常。而且异常会中止当前的程序,如果不采取措施,程序将停止运行。引起异常的原因很多如程序的 bug(例如数字被零除)或某些不合法的输入(如用户输入非而造成整数的字符)。为了避免程序崩溃或停止,我们应当能够在遇见的范围内对异常进行处理。在C# 中关键字(try、catch 和 finally),用来检测、处理异常并使得程序继续运行。用throw抛出异常。
可以用 try 将可能会生成异常的代码块括起来,然后使用 catch 将发生异常时要执行的代码括起来。在finally 块中包含的代码无论是否发生异常都会执行。通常情况下,try 和 catch 同时使用,且可以有多个catch,此时catch内的异常类应按照继承顺序的逆序排列。如异常类A继承了异常类B 则可以写成 try{}catch(A a){}catch(B b){}。不可反过来写。finally块可以不写,多用来确保资源已回收等。
通过以上描述,我们可以得到如下“共识”:
1。程序有自己的业务异常类,定义可能的异常;
2。在开发时,要在可能发生异常的地方捕获异常;
3。处理发生的异常。
现以用户注册举例如下,假定用户注册信息为
用户名,密码,邮箱;要求用户名长度大于4只能为字母,
密码长度为6至18位只能为字母或数字或下划线,邮箱必须是合法的邮箱地址。
下面按照上述顺序实现代码:
//1。
 /// <summary>
    /// 自定义异常类 继承自System.Exception
    /// </summary>
    public class MyExceptions : Exception
    {
        string emessage;
        /// <summary>
        /// 异常信息
        /// </summary>
        public string EMessage
        {
            get { return emessage; }
            set { emessage = value; }
        }
        int eNum;
        /// <summary>
        /// 异常编号
        /// </summary>
        public int ENum
        {
            get { return eNum; }
            set { eNum = value; }
        }
        /// <summary>
        /// 构造函数 直接调用Exception类构造
        /// </summary>
        /// <param name="message"></param>
        public MyExceptions(string message,int num)
            : base(message)
        {
            emessage = message;
eNum =num;
        }
    }
//2。
 /// <summary>
 /// 捕获异常类
 /// </summary>
public class MyCheckException
{
        /// <summary>
        /// 是否为有效的密码,异常编号0
        /// 可能引发MyExceptions异常
        /// </summary>    
        public static bool AvailablePassword(string value)
        {
            if (Regex.Match(value,
                  @"^[a-zA-Z|0-9]\w{5,17}$").Success)
            {
                return true;
            }
            else
            {
                throw new MyExceptions(
                    "密码为数字、字目,不少于6位,不多于18位。",0);
            }
        }
      /// <summary>
        /// 用户名只能是字母,异常编号1
        /// 可能引发MyExceptions异常
        /// </summary>    
        public static bool AvailableName(string value)
        {
            if (Regex.Match(value,
                  @"^[A-Za-z]{4,n}$").Success)
            {
                return true;
            }
            else
            {
                throw new MyExceptions("只能输入字母。",1);
            }
        }
       /// <summary>
        /// 是否为一个有效的邮件地址,异常编号2
        /// 可能引发MyExceptions异常
        /// </summary>
        /// <param name="value">标准的邮件地址</param>
        /// <returns>有效返回TRUE,否则引发MyExceptions异常</returns>
        public static bool AvailableEmail(string value)
        {
            if (Regex.Match(value,
                @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$").Success)
            {
                return true;
            }
            else
            {
                throw new MyExceptions("不是一个有效的邮箱地址。",2);
            }
        }
}
//3。
//可能的检测方式
 private void button1_Click(object sender, EventArgs e)
        {          
            try
            {
                //MyCheckException.AvailablePassword(textBox1.Text);
                //MyCheckException.AvailableName(textBox1.Text);
                if (MyCheckException.AvailableEmail(textBox1.Text))
                {
                    MessageBox.Show("注册成功!");
                }
            }
            catch (MyExceptions ee)
            {
                MessageBox.Show(string.Format(ee.Message +"\t 错误码:"),ee.ENum);
            }
        }
参考资料:MSDN。