C#中的装箱与拆箱
2021/12/6 22:48:57
本文主要是介绍C#中的装箱与拆箱,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
现在已经很少使用ArrayList与Hashtable,除去取数据不方便之外,在加入元素以及其余操作时,花费的时间也是比较多的,效率低;对其解释涉及到装箱和拆箱的问题;
一、什么是装箱和拆箱
装箱:将数值类型转换成引用类型的值
拆箱:将引用类型转换成数值类型
int n = 10; object o = n;//装箱 int nn = (int)o;//拆箱
二、装箱与拆箱的判别
string str = "123"; int a = Convert.ToInt32(str);
上述代码,虽然是由引用类型转换成值类型;但是并没有发生任何的装箱和拆箱的操作;
首先应该判断两者是否是继承关系,在判断是否是拆箱和装箱;上述代码中,string类型与Int类型并不是继承关系,所以不存在装箱和拆箱的关系;
int b = 1233; IComparable c = b;
上述代码发生了装箱,首先int类型与IComparable类型是继承关系;int继承IComparable,又是由值类型转换成引用类型,所以发生了装箱;
三、检验装箱操作的效率
第一组:
ArrayList arraylist = new ArrayList(); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i=0;i<1000000;i++) { arraylist .Add(i); } sw.Stop(); Console.WriteLine(sw.Elapsed);
输出:00:00:00.0427016
第二组:
List<int> list = new List<int>(); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i=0;i<1000000;i++) { list.Add(i); } sw.Stop(); Console.WriteLine(sw.Elapsed);
输出:00:00:00.0111906
第一组代码耗时长一些,因为发生了装箱;arrayList.Add();中的参数是Object类型的,输入的是int类型,所以发生了由值类型到引用类型的转换;
所以以后在写代码的过程中,尽量避开装箱和拆箱操作,这样会降低效率;
这篇关于C#中的装箱与拆箱的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统