代码改变世界

抛出异常

2012-04-25 22:19  精诚所至 金石为开  阅读(247)  评论(0编辑  收藏  举报
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace a
{
	class Program
	{
		static string[] eTypes={"none","simple","index","nested index"};
		static void Main(string[] args)
		{
			foreach (string eType in eTypes)
			{
				try 
				{
					Console.WriteLine("Main() try block reached.");
					Console.WriteLine("ThrowException(\"{0}\") called.",eType);
					ThrowException(eType);
					Console.WriteLine("Main() try block continues.");
				}
				catch (System.IndexOutOfRangeException e)
				{
					Console.WriteLine("Main() System.IndexOutOfRangeException catch"+"block reached. Message:\n\"{0}\"",e.Message);
				}
				catch
				{
					Console.WriteLine("Main() general catch block reached.");
				}
				finally
				{
					Console.WriteLine("Main() finally block reached.");
				}
				Console.WriteLine();
			}
			Console.ReadKey();
		}
		static void ThrowException(string exceptionType)
		{
			Console.WriteLine("ThrowException(\"{0}\") reached.",exceptionType);
			switch (exceptionType)
			{
				case "none":
					Console.WriteLine("Not throwing an exception.");
					break;
				case "simple":
					Console.WriteLine("Throwing System.Exception.");
					throw (new System.Exception());
					break;
				case "index":
					Console.WriteLine("Throwing System.IndexOutOfRangeException.");
					eTypes[4]="error";
					break;
				case "nested index":
					try
					{
						Console.WriteLine("ThrowException(\"nested index\")"+"try block reached.");
						Console.WriteLine("ThrowException(\"index\") called.");
						ThrowException("index");
					}
					catch
					{
						Console.WriteLine("ThrowException(\"nested index\") general"+"catch block reached.");
					}
					finally
					{
						Console.WriteLine("ThrowException(\"nested index\") finally"+"block reached.");
					}
					break;
			}
		}
	}
}