我正在尝试学习如何使用 VS2012 for Desktop 调试和处理 C# 代码中的错误。我正在使用Step Into F11技术逐步执行以下代码。
我了解代码的执行如何在代码的不同部分之间跳转。我将消息打印到控制台以帮助我确定正在执行的步骤。我已经拆分了我的屏幕,这样我就可以同时看到我正在进入哪一行代码以及控制台中的输出消息。
在第 70 行(在注释中标记) - 当nested index
传递给throwException()
我时,我不明白为什么有一个throw
关键字以及它的功能是什么。为什么指针会跳转到嵌套的finally块,然后它会一直返回到 main 并抛出IndexOutOfBounds
异常。这意味着什么?我看到代码中执行跳转的位置,但我不明白为什么它只是说throw
. 这是否意味着已经处理了异常?但是怎么做?
我读到,当您throw
出现异常时,无需添加break;
语句,因为 switch 语句在遇到throw
关键字时会中断,但我不确定这是否是本示例中的正确思维方式。
请帮助我理解第throw
70 行关键字的含义。
先感谢您。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 19
Console.WriteLine("ThrowException(\"{0}\") called.", eType);
ThrowException(eType);
Console.WriteLine("Main() try block continues."); // Line 22
}
catch (System.IndexOutOfRangeException e) // Line 24
{
Console.WriteLine("Main() System.IndexOutOfRangeException catch"
+ " block reached. Message:\n\"{0}\"",
e.Message);
}
catch // Line 30
{
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; // Line 50
case "simple":
Console.WriteLine("Throwing System.Exception.");
throw new System.Exception(); // Line 53
case "index":
Console.WriteLine("Throwing System.IndexOutOfRangeException.");
eTypes[4] = "error"; // Line 56
break;
case "nested index":
try // Line 59
{
Console.WriteLine("ThrowException(\"nested index\") " +
"try block reached.");
Console.WriteLine("ThrowException(\"index\") called.");
ThrowException("index"); // Line 64
}
catch // Line 66
{
Console.WriteLine("ThrowException(\"nested index\") general"
+ " catch block reached.");
throw; // Line 70
}
finally
{
Console.WriteLine("ThrowException(\"nested index\") finally"
+ " block reached.");
}
break;
}
}
}
}
上面的代码编译并运行没有错误。