我今天遇到了一种我没想到的语言行为.现在我渴望了解原因.请考虑以下示例:
try
{
worksheet.AddCell(row, cell++, image.DisplayCaption());
}
catch (NullReferenceException)
{
cell++;
throw;
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中,image为null导致此行抛出NullReferenceException; 然而,cell仍然增加,当然,它在catch块中再次增加.为什么执行第一个后期增量操作?另外,如果worksheet是null ,它会被执行吗?
谢谢,皮特
Jak*_*cki 10
方法调用的参数从左到右进行评估.
而不是捕捉NullRefereneException使用if(image != null).例外情况很慢.
发生的事情顺序:
cell 将复制为value参数cell 作为第二个参数表达式的最后一个操作递增: cell++image.DisplayCaption()worksheet.AddCell(row, <non-incremented value>, <result of DisplayCaption()>);从步骤3开始,NullReferenceException步骤4中的结果不会发生.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |