gpt4 book ai didi

c# - 使用语句未处理的异常

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:29 25 4
gpt4 key购买 nike

根据我正在阅读的内容 here如果你在 using 语句中实例化某些东西,它应该捕获任何异常并跳过代码块。我仍然看到未找到的文件发生未处理的异常:

        using (TextReader sv = File.OpenText(@"sv\.sv"))
{
char[] k = { ':' };
lastWsp = sv.ReadLine().Split(k)[1];
}

我是否误解了 MSDN 文章,还是我需要在编译器中设置一个开关?

最佳答案

using 翻译成try-finally block ,它没有catch,所以你误会了文章。它不会捕获任何异常,它只会确保在发生异常时释放对象。

在你的情况下,因为它是一个 FileNotFound 异常,你的对象将不会被初始化。

您的代码将转化为如下内容:

{
TextReader sv = null;
try
{
sv = File.OpenText(@"sv\.sv");
char[] k = { ':' };
lastWsp = sv.ReadLine().Split(k)[1];
}
finally
{

if(sv != null)
sv.Dispose();
}
}

在上面的代码中,如果出现异常,它会尝试处理你的对象sv。但异常将保持未处理

因为在您的代码中,异常是 FileNotFound 您的对象 sv 将保持为空 (未初始化) 因此没有理由调用 Dispose。但是想象一下,如果您有有效的文件路径,并且在 sv.ReadLine().Split(k)[1]; 处遇到异常,那么它将处理您的 TextReader sv,并且该异常将在层次结构中向上传播,因为没有 catch block 。

关于c# - 使用语句未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239733/

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