Car*_*ras 4 c# loops while-loop
我简单地阅读C#5.0,我有以下声明:
int x = 0;
while (true)
{
if (x++ > 5)
break ; // break from the loop
}
x.Dump();
Run Code Online (Sandbox Code Playgroud)
在LINQPad 4上执行语句,输出为7.
我还是不明白为什么?为什么它不是条件:x ++> 5
该++运营商增加价值,并返回原来的价值.
因此,当x为5时,x增加并5 > 5评估条件.
然后,当x为6时,x增加并6 > 5评估条件,这导致了break.因为x仍然增加,最后的值x是7.
人们经常说当++操作符用作后缀时,在比较之后执行增量,但这在技术上并不正确,这在LinqPad中反编译显示:
int x = 5;
if (x++ > 5)
Console.WriteLine(x);
Run Code Online (Sandbox Code Playgroud)
IL:
IL_0001: ldc.i4.5
IL_0002: stloc.0 // x
IL_0003: ldloc.0 // x
IL_0004: dup
IL_0005: ldc.i4.1
IL_0006: add // <---- Increment
IL_0007: stloc.0 // x <-- Result of increment is popped from the stack and stored in a variable
IL_0008: ldc.i4.5
IL_0009: cgt // <---- Comparison
IL_000B: ldc.i4.0
IL_000C: ceq
IL_000E: stloc.1 // CS$4$0000
IL_000F: ldloc.1 // CS$4$0000
IL_0010: brtrue.s IL_0019
IL_0012: ldloc.0 // x
IL_0013: call System.Console.WriteLine
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |