zoukankan      html  css  js  c++  java
  • 代码规范之循环变量

    第一种写法:
            var list=new List<string>(){"str","str","str","str","str"};
        string s = default(string);        
        foreach(var item in list)
        {            
            s = item;
        }
    
    第二种写法:
            var list=new List<string>(){"str","str","str","str","str"};    
        foreach(var item in list)
        {            
            string s=item;
        }

    可能会有好多程序员以为第一种写法效率会高一些,事实真的是这样吗?

    不是,因为这两种写法最终转变成的IL代码是一样的,它们的IL代码如下

    IL_0000:  newobj      System.Collections.Generic.List<System.String>..ctor
    IL_0005:  stloc.2     
    IL_0006:  ldloc.2     
    IL_0007:  ldstr       "str"
    IL_000C:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_0011:  ldloc.2     
    IL_0012:  ldstr       "str"
    IL_0017:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_001C:  ldloc.2     
    IL_001D:  ldstr       "str"
    IL_0022:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_0027:  ldloc.2     
    IL_0028:  ldstr       "str"
    IL_002D:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_0032:  ldloc.2     
    IL_0033:  ldstr       "str"
    IL_0038:  callvirt    System.Collections.Generic.List<System.String>.Add
    IL_003D:  ldloc.2     
    IL_003E:  stloc.0     
    IL_003F:  ldloc.0     
    IL_0040:  callvirt    System.Collections.Generic.List<System.String>.GetEnumerator
    IL_0045:  stloc.3     
    IL_0046:  br.s        IL_0050
    IL_0048:  ldloca.s    03 
    IL_004A:  call        System.Collections.Generic.List<System.String>.get_Current
    IL_004F:  stloc.1     
    IL_0050:  ldloca.s    03 
    IL_0052:  call        System.Collections.Generic.List<System.String>.MoveNext
    IL_0057:  brtrue.s    IL_0048
    IL_0059:  leave.s     IL_0069
    IL_005B:  ldloca.s    03 
    IL_005D:  constrained. System.Collections.Generic.List<>.Enumerator
    IL_0063:  callvirt    System.IDisposable.Dispose
    IL_0068:  endfinally  

     欢迎加入群:254082423

    一起学习讨论asp.net mvc 

  • 相关阅读:
    上传视频到七牛云django端实现
    课程全文检索接口
    搜索引擎工作原理
    创建订单并生成支付链接接口
    支付宝支付流程
    通过课程查询商品信息
    如何使用 RESTClient 调试微信支付接口
    关于HTML使用ComDlg ActiveX 无法弹出相应对话框的问题1
    Android自定义View的实现方法,带你一步步深入了解View(四)
    Android视图状态及重绘流程分析,带你一步步深入了解View(三)
  • 原文地址:https://www.cnblogs.com/bygrace/p/3824032.html
Copyright © 2011-2022 走看看