![](/img/trans.png)
[英]What is the Technical Term for C# inline variable assignment and evaluation?
[英]what is the c# rule about this inline assignment
我期望结果为0
using System;
public class Program
{
public static void Main()
{
int value = 5;
value += (value += 5) > 5 ? -value : +value;
Console.WriteLine(value);
}
}
由于检测到的值大于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
这种代码令人困惑。 尝试不惜一切代价避免它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.