C# C在抛出异常后未抛出异常的try语句中的代码会发生什么情况

C# C在抛出异常后未抛出异常的try语句中的代码会发生什么情况,c#,C#,所以,如果我有这样的东西: try { variable = Image.FromFile("Image1"); variable2 = Image.FromFile("Image2"); variable3 = Image.FromFile("Image3"); } catch (Exception e) { } 如果第二行抛出异常,会发生什么?变量1的赋值是否正确,而不是2或3?或者它会在处理异常后尝试执行3吗?因为所有变量都是try块的局部作用域,所以它实际上并

所以,如果我有这样的东西:

try
{
    variable =  Image.FromFile("Image1");
    variable2 = Image.FromFile("Image2");
    variable3 = Image.FromFile("Image3");
}
catch (Exception e) { }

如果第二行抛出异常,会发生什么?变量1的赋值是否正确,而不是2或3?或者它会在处理异常后尝试执行3吗?

因为所有变量都是try块的局部作用域,所以它实际上并不重要,因为您无法访问块外的任何变量

当遇到异常时,如果控件被转移到最内部的catch,则无法忽略它并在下一个语句中继续

更新


通过您的更改,如果第二个FromFile抛出,那么变量将有一个图像。variable2/3将看不到任何更改,因此很可能会为null。

如果第2条语句抛出,则它将在第2条语句之后失效。第一个声明将会成功。第三个永远不会被评估

正如另一张海报所说,在这种情况下这并不重要,因为变量是局部变量,ReadFromFile没有副作用。

第一个名为variable的变量将成功地为其赋值

在第二行抛出异常,之后的任何异常都将被丢弃,但之前的任何异常都将执行。因此,为了进一步简化这一点:

执行第1条语句。 第二次抛出异常值未存储在变量中。 3,4,5... 不会执行。 如果您尝试了try/catch/finally,那么finally将始终执行

如果您想更深入地了解异常处理的工作原理,请参阅本文


@A根据您的编辑,是的,即使variable2引发异常,variable也会有图像。不过,这确实是您可以在2秒钟内测试的内容。在哪一行它抛出异常,它不再继续尝试。但是,所做的更改将保持初始状态,对于测试这里实际发生的情况来说是如此微不足道,为什么要问一个问题?