You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中long与ulong互转是否涉及装箱和拆箱操作?

关于long/ulong转换是否触发装箱拆箱的问题

你的理解完全正确:long和ulong之间的转换不会触发装箱或拆箱操作,你给出的代码里也不存在任何装箱拆箱行为。

为什么值类型互转不会装箱?

装箱的本质是把值类型实例包装成引用类型(比如object、接口类型)的对象,这个过程会在托管堆上分配内存并复制值。而long和ulong都是64位的值类型,它们之间的转换只是对内存中二进制位的直接解释或数值转换,全程在栈或寄存器中完成,根本不会涉及引用类型对象的创建,自然没有装箱拆箱的开销。

分析你的代码

ulong number = (ulong)IPAddress.NetworkToHostOrder((long)BitConverter.ToUInt64(bytes));

逐步骤拆解:

  • BitConverter.ToUInt64(bytes) 返回ulong值类型,无装箱;
  • (long)BitConverter.ToUInt64(bytes) 是值类型之间的强制转换,仅处理二进制数值,无装箱;
  • 调用IPAddress.NetworkToHostOrder(long)时,直接传递long值类型参数,没有转成引用类型,无装箱;
  • 最后把方法返回的long转成ulong,依然是值类型内部的转换,无装箱。

整个流程全程都是值类型的直接操作,没有任何装箱拆箱的环节。

内容的提问来源于stack exchange,提问作者8749236

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:12:42