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

Range运算符与Span的区别:dest[..]为何无法完成CopyTo操作?

为什么span.CopyTo(dest[..])没能修改原数组?

问题核心出在数组范围运算符[..]的行为差异上:

  • 当对数组使用[..]时,C#会生成一个原数组内容的全新副本,而非像Span那样的内存视图。
  • 所以span.CopyTo(dest[..])实际是把数据复制到了这个临时生成的副本数组里,你的原dest数组根本没被修改,最终输出自然是初始的全0。

对比其他正确写法的逻辑:

  • span.CopyTo(dest):调用的是CopyTo接受T[]的重载,直接操作原数组内存,因此生效。
  • dest.AsSpan():将数组转换为指向原内存的Span<byte>,CopyTo操作直接作用于原数组,生效。
  • dest.AsSpan()[..]:对Span做范围切片,得到的仍是指向原数组内存的Span,复制操作同样会修改原数组。

一句话总结:数组的[..]是「复制切片」,而Span的[..]是「视图切片」,这就是导致结果不同的关键。

内容的提问来源于stack exchange,提问作者v.oddou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:03:13