如果你有 (note:这不是有效的 C#,请参阅下面的有效示例):
try {
// ... some code: A
} catch(...) {
// ... exception code: B
} finally {
// finally code: C
}
代码A将被执行。如果一切顺利(即A执行时没有抛出异常),它将进入finally,因此代码C将被执行。如果A执行时抛出异常,则异常会转到B,最后转到C。
作为示例,以下是来自以下位置的有效 C# 代码块:http://msdn.microsoft.com/en-us/library/dszsf989.aspx http://msdn.microsoft.com/en-us/library/dszsf989.aspx:
public class EHClass
{
void ReadFile(int index)
{
// To run this code, substitute a valid path from your local machine
string path = @"c:\users\public\test.txt";
System.IO.StreamReader file = new System.IO.StreamReader(path);
char[] buffer = new char[10];
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (System.IO.IOException e)
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
finally
{
if (file != null)
{
file.Close();
}
}
// Do something with buffer...
}
}
使用 try/catch/finally 的原因是为了防止某些代码出现错误(上例中的 A)时程序失败。如果有问题可以使用catch
捕获问题并执行一些有用的操作,例如通知用户、将异常记录到日志文件、重试或尝试其他您认为可能有效的操作,而不是您最初尝试的操作。
finally
用于确保执行一些清理工作。例如。在 A 中,您可能会尝试打开一个文件并读取它。如果打开成功,但读取失败,则会有一个打开的文件悬空。在这种情况下,您希望将其关闭,您可以这样做finally
block - 该块总是被执行,保证文件的关闭。
请查看此处了解更多信息:
- http://msdn.microsoft.com/en-us/library/0yd65esw.aspx http://msdn.microsoft.com/en-us/library/0yd65esw.aspx
- http://www.c-sharpcorner.com/UploadFile/puranindia/75/Default.aspx http://www.c-sharpcorner.com/UploadFile/puranindia/75/Default.aspx