zoukankan      html  css  js  c++  java
  • EffectiveC#17--装箱和拆箱的最小化

    1.如下这段代码会经历装箱和拆箱。例如25会先装箱成object后传递给writeline方法(一次拷贝),在方法内部又

    经历拆箱成int(第二次拷贝)后然后调用tostring().

    Console.WriteLine("A few numbers:{0}, {1}, {2}", 25, 32, 50);
    

     所以建议这种写法:只经历一次装箱

    Console.WriteLine("A few numbers:{0}, {1}, {2}", 25.ToString(), 32.ToString(), 50.ToString());
    

     规则一:隐式需要object'类型时,值类型先装箱。 

    2.在使用.Net 1.x的集合时,当你添加一个值类型数据到集合时中,你就创建了一个箱子。任何时候从集合中移出一个对象时,你得到的是箱子里的一个拷贝

    struct Person
    {........}
    // Using the Person in a collection: 
    ArrayList attendees = new ArrayList( ); 
    Person p = new Person( "Old Name" ); 
    attendees.Add( p ); 
    // Try to change the name:   Would work if Person was a reference type.
    Person p2 = (( Person )attendees[ 0 ] ); 
    p2.Name = "New Name"; 
    // Writes "Old Name": 
    Console.WriteLine( attendees[ 0 ].ToString( ));
    

      此段代码有3处拷贝。Person是一个值类型数据,在存储到ArrayList之前它被装箱。这会产生一个拷贝。而在移出的Persone对象上通过访问属性做一些修改时,另一个拷贝被创建。而你所做的修改只是针对拷贝,而实际上还有第三个拷贝通过ToString()方法来访问attendees[0]中的对象。

  • 相关阅读:
    水平居中
    flex布局
    get新技能:上传了 flv 或 MP4 文件到服务器,可访问总是出现 “无法找到该页”的 404 错误
    小程序3.8
    小程序3.7
    Vue 中select option默认选中的处理方法
    HTML5 data属性
    静态html返回
    node中可读流、可写流
    node.js fs、http使用
  • 原文地址:https://www.cnblogs.com/tiantianle/p/4893364.html
Copyright © 2011-2022 走看看