回答編集履歴

1

追記

2019/04/11 04:02

投稿

tamoto
tamoto

スコア4304

test CHANGED
@@ -8,6 +8,6 @@
8
8
 
9
9
  C#のメソッドは、コンパイルされるときに内部で利用している変数を全て洗い出し、ローカル変数領域のサイズを決定します。このとき変数のスコープは関係ないため、どちらのコードでも同じ数の変数領域が確保されます。
10
10
 
11
- 前者のコードでは、そのローカル変数`kingaku`をループ前に0初期化している処理が余分に発生しています。前者のコードの`int kingaku = 0;`を`int kingaku;`に書き直すと、**前者と後者は全く同じコンパイル結果になります。**
11
+ 前者のコードでは、後者に比べてローカル変数`kingaku`をループ前に0初期化る処理が余分に存在しています。前者のコードの`int kingaku = 0;`を`int kingaku;`に書き直すと、**前者と後者は全く同じコンパイル結果になります。**とはいえどちらでもJITの段階で同じコードになるのでパフォーマンスへの影響は一切無いですが。
12
12
 
13
13
  最後に、質問文でも懸念していますが、前者のコードでは変数のスコープが漏れているのが大問題です。スコープの概念はC#のレイヤ上に存在するため、コンパイル結果が等しくなっている以上無用にスコープを拡大する理由はありません。