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