您的位置:首页 > 编程语言 > C#

C# 捕获异常try...catch...finally

2010-06-22 10:36 429 查看
class Program
{
static void Main(string[] args)
{
string userInput;

while (true)
{
try
{
Console.WriteLine("输入0到5:");

userInput = Console.ReadLine();

if (userInput == "")
{
//当用户输入""时,跳出try和while但任然执行finally的内容
break;
}

int index = Convert.ToInt32(userInput);

if (index < 0 || index > 5)
{
//抛出异常
//可使用System.Exception类,但它是个基本类,没有包含特定错误信息
//此处用派生类IndexOutOfRangeException
throw new IndexOutOfRangeException("你输入了:" + userInput + "超出范围!");
}

Console.WriteLine("你输入了:" + index);
}
//传递给catch块的参数只能用于该catch块,因此后续catch块任然可用同名参数ex
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("抛出异常:" + ex.Message);
}
//如果没有在前面catch块中捕获的异常类,这个也能处理IndexOutOfRangeException
//计算机只执行它在catch块列表中找到的第一个合适catch块
//基类的一个引用可以指向派生于它的所有类实例
//因此,最上面的catch块因应用于最特殊的异常情况,最后的是最一般的catch块
catch (Exception ex)
{
Console.WriteLine("抛出异常:" + ex.Message);
}
//最一般catch块(不带参数),用于处理其他没用C#编写的代码抛出的异常
//C#中只有派生于System.Exception类的实例才能作为异常来抛出,其他语言没这个限制
//此catch块同样能捕获全部异常,只是不知异常的详细信息
catch
{
//因为我们不知道这个异常表示什么类
Console.WriteLine("其他异常!");
}
//无论执行try,catch最后都将执行finally块
finally
{
Console.WriteLine("谢谢!");
}
}

/* 没有处理异常时发生的情况
* 生成一个异常后,代码中没有catch块能处理这异常,由.NET运行库捕获
* .NET运行库把整个程序放在另一个更大的try块中,用一个catch处理捕获所有异常
*/
}
}


注:一般编写一个可执行程序,应捕获异常,编写一个库,最好不要捕获,要假定调用代码可以处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: