C# 不可预测的语言行为i++;

C# 不可预测的语言行为i++;,c#,.net,post-increment,pre-increment,C#,.net,Post Increment,Pre Increment,我试着做下面的事情 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#中如何工作的解释吗?i++将为您提供原始值,而不是增量值,您将在下次使用i时看到更改。如果要获得递增的值,请使用++i 查看详细

我试着做下面的事情

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#中如何工作的解释吗?

i++
将为您提供原始值,而不是增量值,您将在下次使用
i
时看到更改。如果要获得递增的值,请使用
++i


查看详细答案,方法是

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

在代码行结束之前,它不会保持
i
的值不变,这似乎是您所期望的。

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

i%Max\u Col\u items==0


这本身就是一个行动。一旦该操作行结束(值为i),增量即完成

OP清楚地表明了他预期会发生什么以及他观察到了什么。他不想要递增的值;他想知道为什么他的
&&
@Rawling的第二部分会增加值,这就是我所说的,在下次使用
I
时会看到变化,是的。你原来的答案只是说,<代码> i++给出了原始值,并使用<代码> +i+i>代码>如果你想要的是与问题无关的原始值。@ Rawling,我在编辑的中间,试图找到Eric lippert的答案,但是这是可能的副本。