可以用 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
{
/// 是否为有效的密码,异常编号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);
}
}
/// 用户名只能是字母,异常编号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);
}
}
/// 是否为一个有效的邮件地址,异常编号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);
}
}
}
//可能的检测方式
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);
}
}