1.try...catch...finally的代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Spacing added here so that line numbers match with the chapter description.
namespace Ch07Ex02
{
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."); // Line 23
Console.WriteLine("ThrowException(\"{0}\") called.", eType); // Line 24
ThrowException(eType);
Console.WriteLine("Main() try block continues."); // Line 26
}
catch (System.IndexOutOfRangeException e) // Line 28
{
Console.WriteLine("Main() System.IndexOutOfRangeException catch"
+ " block reached. Message:\n\"{0}\"",
e.Message);
}
catch // Line 34
{
Console.WriteLine("Main() general catch block reached.");
}
finally
{
Console.WriteLine("Main() finally block reached.");
}
Console.WriteLine();
}
Console.ReadKey();
}
{
foreach (string eType in eTypes)
{
try
{
Console.WriteLine("Main() try block reached."); // Line 23
Console.WriteLine("ThrowException(\"{0}\") called.", eType); // Line 24
ThrowException(eType);
Console.WriteLine("Main() try block continues."); // Line 26
}
catch (System.IndexOutOfRangeException e) // Line 28
{
Console.WriteLine("Main() System.IndexOutOfRangeException catch"
+ " block reached. Message:\n\"{0}\"",
e.Message);
}
catch // Line 34
{
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); // Line 49
switch (exceptionType)
{
case "none":
Console.WriteLine("Not throwing an exception.");
break; // Line 54
case "simple":
Console.WriteLine("Throwing System.Exception.");
throw (new System.Exception()); // Line 57
case "index":
Console.WriteLine("Throwing System.IndexOutOfRangeException.");
eTypes[4] = "error"; // Line 60
break;
case "nested index":
try // Line 63
{
Console.WriteLine("ThrowException(\"nested index\") " +
"try block reached.");
Console.WriteLine("ThrowException(\"index\") called.");
ThrowException("index"); // Line 68
}
catch // Line 70
{
Console.WriteLine("ThrowException(\"nested index\") general"
+ " catch block reached.");
//throw;
}
finally
{
Console.WriteLine("ThrowException(\"nested index\") finally"
+ " block reached.");
}
break;
}
}
}
}
{
Console.WriteLine("ThrowException(\"{0}\") reached.", exceptionType); // Line 49
switch (exceptionType)
{
case "none":
Console.WriteLine("Not throwing an exception.");
break; // Line 54
case "simple":
Console.WriteLine("Throwing System.Exception.");
throw (new System.Exception()); // Line 57
case "index":
Console.WriteLine("Throwing System.IndexOutOfRangeException.");
eTypes[4] = "error"; // Line 60
break;
case "nested index":
try // Line 63
{
Console.WriteLine("ThrowException(\"nested index\") " +
"try block reached.");
Console.WriteLine("ThrowException(\"index\") called.");
ThrowException("index"); // Line 68
}
catch // Line 70
{
Console.WriteLine("ThrowException(\"nested index\") general"
+ " catch block reached.");
//throw;
}
finally
{
Console.WriteLine("ThrowException(\"nested index\") finally"
+ " block reached.");
}
break;
}
}
}
}
(1)try内有throw或是有异常操作,catch才会接住。
(2)可用"throw(new System.Exception());"在try中抛出异常。
(3)catch中可用"throw;"抛出异常。
2.调试和错误处理
(1)想要使用Debug.WriteLine(),Debug.WriteLineIf(),Debug.Write(),Trace.WriteLine(),Trace.WriteLineIf(),Trace.Write()等函数,需要加上"using System.Diagnostics;"这名称空间。
(2)Debug.WriteLine()和Trace.WriteLine()等函数输出字符串带有变量时可以不用string.Format()。
总结的调试方法:
一.诊断输出。用Debug.WriteLine()和Trace.WriteLine()等函数,配合[输出]窗口,可以查看运行的过程。
二.跟踪点。设置跟踪点,配合[输出]和[断点]窗口,可查看运行的过程。
三.判定语句。用Debug.Assert()和Trace.Assert()来促发断点,配合弹出的对话框和[输出]窗口。
四.断点。设置断点,配合[输出]和[断点]窗口。
(注:三和四可搭配:[自动(Ctrl+D,A)][局部变量(Ctrl+D,L)][监视]窗口,以及单步执行代码。)