【C#】for文の中で変数宣言する場合と外で宣言する場合の違い
宣言の場所の違いによるコード実行時の違いを見ていきましょう
for文の中で宣言する場合
C#コード
for (int i = 0; i < 10; i++)
{
int x = i * 2;
System.Console.WriteLine(x);
}
IL
// Method begins at RVA 0x206c
// Code size 31 (0x1f)
.maxstack 2
.entrypoint
.locals init (
[0] int32 i,
[1] int32 x,
[2] bool
)
IL_0000: ldc.i4.0
IL_0001: stloc.0
// sequence point: hidden
IL_0002: br.s IL_0015
// loop start (head: IL_0015)
IL_0004: nop
IL_0005: ldloc.0
IL_0006: ldc.i4.2
IL_0007: mul
IL_0008: stloc.1
IL_0009: ldloc.1
IL_000a: call void [System.Console]System.Console::WriteLine(int32)
IL_000f: nop
IL_0010: nop
IL_0011: ldloc.0
IL_0012: ldc.i4.1
IL_0013: add
IL_0014: stloc.0
IL_0015: ldloc.0
IL_0016: ldc.i4.s 10
IL_0018: clt
IL_001a: stloc.2
// sequence point: hidden
IL_001b: ldloc.2
IL_001c: brtrue.s IL_0004
// end loop
IL_001e: ret
} // end of method Program::'<Main>$'
for文の外で宣言する場合
C#コード
int x;
for (int i = 0; i < 10; i++)
{
x = i * 2;
System.Console.WriteLine(x);
}
IL
// Method begins at RVA 0x206c
// Code size 31 (0x1f)
.maxstack 2
.entrypoint
.locals init (
[0] int32 x,
[1] int32 i,
[2] bool
)
IL_0000: ldc.i4.0
IL_0001: stloc.1
// sequence point: hidden
IL_0002: br.s IL_0015
// loop start (head: IL_0015)
IL_0004: nop
IL_0005: ldloc.1
IL_0006: ldc.i4.2
IL_0007: mul
IL_0008: stloc.0
IL_0009: ldloc.0
IL_000a: call void[System.Console]System.Console::WriteLine(int32)
IL_000f: nop
IL_0010: nop
IL_0011: ldloc.1
IL_0012: ldc.i4.1
IL_0013: add
IL_0014: stloc.1
IL_0015: ldloc.1
IL_0016: ldc.i4.s 10
IL_0018: clt
IL_001a: stloc.2
// sequence point: hidden
IL_001b: ldloc.2
IL_001c: brtrue.s IL_0004
// end loop
IL_001e: ret
} // end of method Program::'<Main>$'
わかったこと
ILに変換された時、使っているローカル変数は違いますが、全く同じ動きをしているのがわかります
なので、処理速度は同じになります
for文の中で宣言する方が見やすいので、そちらを採用しましょう
ディスカッション
コメント一覧
まだ、コメントがありません