【问题标题】:Unpredicted language behavior i++意外的语言行为 i++
【发布时间】:2012-11-20 19:24:36
【问题描述】:

我尝试了以下操作

i=0;
if (i++ % Max_Col_items == 0 && i !=0)
{

}

发现中间增加了i

i % Max_Col_items == 0;
i=i+1;
i !=0;

虽然我最后会增加i

i % Max_Col_items == 0;
i !=0;
i=i+1;

谁能找到i++ 在 C# 中如何工作的解释?

【问题讨论】:

标签: c# .net post-increment pre-increment


【解决方案1】:

那是因为(正如您正确指出的)

i % Max_Col_items == 0;

本身就是一个操作。一旦该操作线结束(值为 i ),增量就完成了。

【讨论】:

    【解决方案2】:

    i++ 立即增加i 的值,但计算为增加前的值。

    直到代码行结束时,i 的值才会保持不变,这似乎是您所期望的。

    【讨论】:

      【解决方案3】:

      i++ 将为您提供原始值,而不是增加的值,您将在下次使用 i 时看到变化。如果您想获得增加的值,请使用++i

      查看Eric Lippert on the same issue的详细回答

      【讨论】:

      • OP 已明确表示他预期会发生什么以及他观察到会发生什么。他不想要增加的值;他想知道为什么他的&& 的第二部分会增加该值。
      • @Rawling,这就是我所说的,更改将在下次使用i时可见
      • 最终,是的。您的原始答案只是说i++ 给出了原始值,如果您想要原始值,请使用++i,这与问题无关。
      • @Rawling,我正在编辑并试图通过 Eric lippert 找到答案,但没关系
      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 2014-08-27
      • 2016-02-20
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多