gpt4 book ai didi

c# - 异常后代码如何执行?

转载 作者:太空狗 更新时间:2023-10-29 21:41:04 26 4
gpt4 key购买 nike

我一定是遗漏了一些东西......如何抛出异常,但异常后面的代码仍然在调试器中被命中?

private UpdaterManifest GetUpdaterManifest()
{
string filePathAndName = Path.Combine(this._sourceBinaryPath, this._appName + ".UpdaterManifest");

if (!File.Exists(filePathAndName))
{
// This line of code gets executed:
throw new FileNotFoundException("The updater manifest file was not found. This file is necessary for the program to run.", filePathAndName);
}

UpdaterManifest updaterManifest;

using (FileStream fileStream = new FileStream(filePathAndName, FileMode.Open))
{
// ... so how is it that the debugger stops here and the call stack shows
// this line of code as the current line? How can we throw an exception
// above and still get here?
XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdaterManifest));
updaterManifest = xmlSerializer.Deserialize(fileStream) as UpdaterManifest;
}

return updaterManifest;
}

最佳答案

在某些情况下通常会发生这种情况:

  • 当“要求源文件与原始版本完全匹配”选项关闭时。在这种情况下,您不会在文件不同步时收到警告。

  • 当 IDE 询问“存在构建错误。您想继续并运行上次成功的构建吗?”,在这种情况下,IDE 可能会错误地选择正确的行,因为它运行的是早期版本。

  • 当您调试代码的发布版本时,其中的某些部分已被优化掉。这导致突出显示的行成为源代码中的下一个可用行,它反射(reflect)了优化代码中的实际语句(这在使用优化的外部程序集进行调试时经常会看到)。


编辑:我有点误读了您的代码。在“抛出”和突出显示的行之间,只有一个变量声明,根本没有要执行的代码。我假设您的意思是突出显示了代码“使用...”?因为这符合预期:它是抛出语句之后的第一行(抛出语句本​​身不会为调试器“捕获”错误)。

见截图: enter image description here

关于c# - 异常后代码如何执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563631/

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