我有一段代码:
using System;
public class Program
{
private static int Incr(ref int i)
{
return i++;
}
public static void Main()
{
var i = 0;
i += Incr(ref i);
Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud)
Console.WriteLine(i)会给我们"0".但是在没有"+ ="的情况下调用Incr(ref i)
var i = 0;
Incr(ref i);
Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)
会给我们"1".这怎么可能?
想想i += Incr(ref i)作为
i = i + Incr(ref i);
Run Code Online (Sandbox Code Playgroud)
换一种说法:
iIncr(ref i)i现在Incr(ref i)设置i为1,但返回 0 ...所以总和最终为0 + 0,然后分配给i.的值i是非常暂时 1,在之间的时间Incr返回并且结果被分配回i.
如果你有:
int j = i + Incr(ref i);
Run Code Online (Sandbox Code Playgroud)
然后你最终会j=0, i=1.
当你只是调用Incr(ref i)然后Incr增加i(所以i是1)然后忽略返回值...所以i之后是1.
在其他新闻中:应该不惜一切代价避免这样的代码.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |