C# の i++ と ++i におけるインクリメントについて

C#のインクリメントの違い
C# においてインクリメントを行う場合は、「i++」など、「++」と表記することが多いです。しかし、「++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()); 

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック