1

在 C# 中,我想知道我们是否应该将 varbile 声明为更接近它的使用位置,是的,有多个问题问同一个问题。但是我还是有疑问!

我试过这样的示例代码:

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 回答