我期待结果是0
dotnetfiddler演示
using System; public class Program { public static void Main() { int value = 5; value += (value += 5) > 5 ? -value : +value; Console.WriteLine(value); } }
价值从5开始
价值增加到10
合并检测到它高于5
它返回-10
因为检测到的值高于5,这意味着在这种情况下它的值为10,我期待10 + = -10
发生的事情是5 + = -10
什么定义了这种行为?
我相信它的功能如下:
int value = 5; value += //5 is stored here for the calculation (value += 5) // 5 is modified to 10 > 5 ? -value //-10 : +value; //10
所以你得到了 5 - 10 = -5
进一步阅读:MSDN
让我们看一下发布模式下发出的IL:
Program.Main: IL_0000: ldc.i4.5 // Load 5 IL_0001: stloc.0 // Store value IL_0002: ldloc.0 // Load value IL_0003: dup // Create a duplicate of value (5) IL_0004: ldc.i4.5 // Load 5 IL_0005: add // Add 5 to variable. Now value == 10 IL_0006: dup // Duplicate value. IL_0007: stloc.0 // Store value (10) IL_0008: ldc.i4.5 // Load 5 IL_0009: bgt.s IL_000E // Check value (10) > 5. If true go to IL_000E IL_000B: ldloc.0 // value IL_000C: br.s IL_0010 IL_000E: ldloc.0 // Load value (10) IL_000F: neg // Negate value (-10) IL_0010: add // -10 + 5 = -5 IL_0011: stloc.0 // Store -5 in value IL_0012: ldloc.0 // value IL_0013: call System.Console.WriteLine // Print value IL_0018: ret
这种代码令人困惑.尽量避免使用它.