迭代ToList方法vs ToList内存中保存的数据

时间:2017-08-06 10:22:16

标签: c# .net visual-studio

当前的.NET编译器是否以不同方式对待它们?

List<string> stuff = GetSomeStuff();
foreach(string thing in stuff) { ... }

VS

foreach(string thing in GetSomeStuff()) { ... }

1 个答案:

答案 0 :(得分:1)

如果启用编译器优化,则两组代码将编译为相同的IL。例如,这是使用LinqPad时主方法的IL输出:

IL_0000:  ldarg.0     
IL_0001:  call        UserQuery.GetSomeStuff
IL_0006:  callvirt    System.Collections.Generic.List<System.String>.GetEnumerator
IL_000B:  stloc.0     
IL_000C:  br.s        IL_0016
IL_000E:  ldloca.s    00 
IL_0010:  call        System.Collections.Generic.List<System.String>.get_Current
IL_0015:  pop         
IL_0016:  ldloca.s    00 
IL_0018:  call        System.Collections.Generic.List<System.String>.MoveNext
IL_001D:  brtrue.s    IL_000E
IL_001F:  leave.s     IL_002F
IL_0021:  ldloca.s    00 
IL_0023:  constrained. System.Collections.Generic.List<>.Enumerator
IL_0029:  callvirt    System.IDisposable.Dispose
IL_002E:  endfinally  
IL_002F:  ret