gpt4 book ai didi

c# - 为什么如果该行抛出异常,则执行后增量操作?

转载 作者:行者123 更新时间:2023-11-30 13:39:12 24 4
gpt4 key购买 nike

我今天遇到了一种我没想到的语言行为。现在我很想知道为什么。考虑以下示例:

try
{
worksheet.AddCell(row, cell++, image.DisplayCaption());
}
catch (NullReferenceException)
{
cell++;
throw;
}

在我的示例中,image 为 null 导致此行抛出 NullReferenceException;但是,cell 仍然递增,当然,它在 catch block 中再次递增。为什么执行第一个后增量操作?另外,如果worksheet为null,是否会执行?

谢谢,皮特

最佳答案

方法调用的参数从左到右求值。

而不是捕捉 NullRefereneException使用 if(image != null) .异常很慢。

事情发生的顺序:

  1. cell为值参数复制
  2. cell作为第二个参数表达式的最后一个操作递增:cell++
  3. image.DisplayCaption()
  4. worksheet.AddCell(row, <non-incremented value>, <result of DisplayCaption()>);

从第 3 步开始,结果为 NullReferenceException第 4 步没有发生。

关于c# - 为什么如果该行抛出异常,则执行后增量操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075266/

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