質問するログイン新規登録

回答編集履歴

1

追記

2019/04/11 04:02

投稿

tamoto
tamoto

スコア4346

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