C# の i++ と ++i におけるインクリメントについて
C# においてインクリメントを行う場合は、「i++」など、「++」と表記することが多いです。しかし、「++i」のように「++」を頭に持ってきても同様の動きとなります(内部的には若干異なるらしい)。
「i++」は、インクリメント前の数値が返却されます。
二つの式を比較すると、「++i」の場合はカッコで括らないと ToString() できません。「i++」はそのまま ToString() できます。これは i そのものを返却するからですが、このあたりの挙動を見ると、内部的に異なった動作であることが理解できます。
ちょっとした違いなのですが、あまり気にしないで書いている部分なので、ちゃんと動作確認をしないととんでもないバグが出てしまう可能性があります。
もちろん、一番わかりやすいのはこのような書き方です。
数字をインクリメントする
// インクリメント var i = 0; i++; // 1 Console.WriteLine(i); ++i; // 2 Console.WriteLine(i);
i++を文字列にする
しかし、以下のような書き方をすると…var i = 0; // 0 Console.WriteLine(i++.ToString());ひょっとすると想定した結果ではないことに驚くかもしれません。
「i++」は、インクリメント前の数値が返却されます。
++iを文字列にする
では、こう書いたらどうなるでしょうか?var i = 0; // 1 Console.WriteLine((++i).ToString());「i++」は、インクリメント後の数値が返却されます。
二つの式を比較すると、「++i」の場合はカッコで括らないと ToString() できません。「i++」はそのまま ToString() できます。これは i そのものを返却するからですが、このあたりの挙動を見ると、内部的に異なった動作であることが理解できます。
ちょっとした違いなのですが、あまり気にしないで書いている部分なので、ちゃんと動作確認をしないととんでもないバグが出てしまう可能性があります。
もちろん、一番わかりやすいのはこのような書き方です。
var i = 0; i += 1; // 1 Console.WriteLine(i.ToString());