私は完全に理解できない結果を返す単純なコンソールアプリケーションコードです。面白いインタビューの演習結果:返り値、ポストインクリメントおよび参照の振る舞い
することは、それが0を出力するかどうかを考えるのはコンソールで1または2を試してみてください:
using System;
namespace ConsoleApplication
{
class Program
{
static void Main()
{
int i = 0;
i += Increment(ref i);
Console.WriteLine(i);
Console.ReadLine();
}
static private int Increment(ref int i)
{
return i++;
}
}
}
答えは0
私は理解していないことIncrement
方法から、なぜポストインクリメントi++
ですref
(渡された変数のコピーではない)で実行される変数は増分しますが、後で無視されます。
このビデオでは私は何を意味している:デバッグ中に私は、その値が1にインクリメントされて見たが、その後、それは0に戻り、なぜ
誰かがこの例を説明し、することはできますか?
'return i ++'を実行するとき、iの値(0)はインクリメントされる前に返されます。インクリメントが発生する可能性がありますが、値はすでに返されているため、破棄されます。代わりに 'return ++ i;'を実行してみてください。 – shahkalpesh
はい、しかしref ...を更新しています。これは0に戻らないはずです。デバッガの値が1 – Sidewinder94
に更新されているため、実行されます。ポストインクリメント演算子のためです。 ポストインクリメントの仕組みを理解するために、この優れた答えをEric Lippertからお読みください。 http://stackoverflow.com/questions/3346450/what-is-the-difference-between-i--i/3346729#3346729 – Boney