在 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