为什么在函数返回其值后执行C#上整数的增量
本文关键字:整数 执行 函数 返回 为什么 | 更新日期: 2023-09-27 18:06:17
为什么这两个函数返回不同的值?
当我调用这个传递0作为参数的函数时,它返回1
public static int IncrementByOne(int number)
{
return (number + 1);
}
但是,当我调用这个传递0作为参数的函数时,即使执行了增量并且数字变量在方法内将其值更改为1,它也会返回0?
public static int IncrementByOne(int number)
{
return number++;
}
这两个函数的返回值不同的原因是什么?
number++
是后增量。它在递增之前返回其当前值。要获得与第一种方法相同的行为,请使用预注册++number
请参阅文档:https://msdn.microsoft.com/en-us/library/36x43w8w.aspx
后增量(后缀(++
运算符的值是操作数在增量之前的值。因此,如果当前值为2
,则操作员保存2
,将其递增为3
,但返回保存的值。
对于您的功能
public static int IncrementByOne(int number)
{
return number++;
}
查看生成的IL代码,看看会发生什么:
IncrementByOne:
IL_0000: ldarg.0 // load 'number' onto stack
IL_0001: dup // copy number - this is the reason for the
// postfix ++ behavior
IL_0002: ldc.i4.1 // load '1' onto stack
IL_0003: add // add the values on top of stack (number+1)
IL_0004: starg.s 00 // remove result from stack and put
// back into 'number'
IL_0006: ret // return top of stack (which is
// original value of `number`)
后缀++
运算符返回原始值(而不是增量值(的原因是dup
语句——number
的值在堆栈上两次,其中一个副本通过函数末尾的ret
语句留在堆栈上,因此它会被返回。增量的结果返回到CCD_ 11中。
或者,为了指出洞穴人的方法。。。
public static int IncrementByOne(int number)
{
number++;
return number;
}
最后一个函数后递增数字;如果您想要立即递增的值,可以尝试return ++number;