1

C# では、varbile clsoer を使用する場所に宣言する必要があるかどうか疑問に思っていましたが、同じ質問が複数あります。しかし、まだ疑問があります!

このようなサンプルコードで試しました:

private void button1_Click(object sender, EventArgs e)
{
    for(int i= 0; i<=1000; i++)
    {
        int myVariable = 12;
        myVariable = i;
    }
}

別の機会に、int myVariable = 12; のコード行を移動しました。forループの直前に。そして、これらは私が ILDASM で得たものです。previsouds の質問と回答は、C# が同じコードを作成したと言っていますが、実際にはそうではないことがわかります! それで、何が起こっているのですか?最後に、それは良い習慣ですか?- C# コンパイラを使用 -

内部変数:

.method private hidebysig instance void  button1_Click(object sender,
                                                       class [mscorlib]System.EventArgs e) cil managed
{
  // Code size       32 (0x20)
  .maxstack  2
  .locals init ([0] int32 i,
           [1] int32 myVariable,
           [2] bool CS$4$0000)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  br.s       IL_0010
  IL_0005:  nop
  IL_0006:  ldc.i4.s   12
  IL_0008:  stloc.1
  IL_0009:  ldloc.0
  IL_000a:  stloc.1
  IL_000b:  nop
  IL_000c:  ldloc.0
  IL_000d:  ldc.i4.1
  IL_000e:  add
  IL_000f:  stloc.0
  IL_0010:  ldloc.0
  IL_0011:  ldc.i4     0x3e8
  IL_0016:  cgt
  IL_0018:  ldc.i4.0
  IL_0019:  ceq
  IL_001b:  stloc.2
  IL_001c:  ldloc.2
  IL_001d:  brtrue.s   IL_0005
  IL_001f:  ret
} /

/ メソッドの終わり Form1::button1_Click

for ループの外側の変数:

.method private hidebysig instance void  button1_Click(object sender,
                                                       class [mscorlib]System.EventArgs e) cil managed
{
  // Code size       32 (0x20)
  .maxstack  2
  .locals init ([0] int32 myVariable,
           [1] int32 i,
           [2] bool CS$4$0000)
  IL_0000:  nop
  IL_0001:  ldc.i4.s   12
  IL_0003:  stloc.0
  IL_0004:  ldc.i4.0
  IL_0005:  stloc.1
  IL_0006:  br.s       IL_0010
  IL_0008:  nop
  IL_0009:  ldloc.1
  IL_000a:  stloc.0
  IL_000b:  nop
  IL_000c:  ldloc.1
  IL_000d:  ldc.i4.1
  IL_000e:  add
  IL_000f:  stloc.1
  IL_0010:  ldloc.1
  IL_0011:  ldc.i4     0x3e8
  IL_0016:  cgt
  IL_0018:  ldc.i4.0
  IL_0019:  ceq
  IL_001b:  stloc.2
  IL_001c:  ldloc.2
  IL_001d:  brtrue.s   IL_0008
  IL_001f:  ret
} // end of method Form1::button1_Click
4

1 に答える 1

2

良い習慣は、あなたのニーズが何であるかに完全に依存します! ループの反復ごとに異なる変数が必要な場合は、ループの内側に作成し、それ以外の場合は外側に配置する必要があります。

于 2012-04-20T18:23:12.803 に答える