gpt4 book ai didi

c# - try{..}catch{...} 有 finally 和没有它的区别

转载 作者:太空狗 更新时间:2023-10-29 20:52:56 26 4
gpt4 key购买 nike

这样的代码有什么区别:

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();
}
}

还有这个:

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);
}
if (file != null)
{
file.Close();
}

在这个构造中真的是finally block必要的。微软为什么提供这样的构造?这似乎是多余的。不是吗?

最佳答案

想象一下,如果发生了您尚未处理的其他异常,例如ArgumentOutOfRangeException,或者如果您想重新抛出异常或从 catch block 中抛出包装异常:

  1. 无论是否发生异常,第一个 block 将确保文件关闭。

  2. 如果没有发生异常或发生 IOException,第二个 block 将关闭文件。它不处理任何其他情况。

关于c# - try{..}catch{...} 有 finally 和没有它的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com