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

MsCorLib中Array.Sort的Span代码在.NET7/C#11编译报错的解决问询

编译错误原因及解决办法

错误原因

.NET运行时内部的Array.Sort<T>属于核心信任代码,编译时会启用普通项目没有的特殊语法豁免规则。而在常规C#项目中,语法明确禁止直接将方法返回的ref值作为ref参数传递给其他方法或构造函数——MemoryMarshal.GetArrayDataReference(array)返回的是ref T,直接带ref传给Span<T>构造函数违反了C#的常规语法约束,因此触发编译错误。

解决办法

方法1:用临时变量持有ref值

将MemoryMarshal.GetArrayDataReference返回的ref值赋值给可读写的ref变量,再传递给Span<T>构造函数,符合C#语法要求:

ref T arrayDataRef = ref MemoryMarshal.GetArrayDataReference(array);
var span = new Span<T>(ref arrayDataRef, array.Length);

方法2:使用官方推荐的数组转Span方式

如果需求只是将数组转换为Span<T>,无需手动调用底层构造函数,直接使用框架提供的隐式转换或AsSpan()方法即可,这是最简洁安全的写法:

// 隐式转换
Span<T> span = array;
// 或者调用AsSpan方法
var span = array.AsSpan();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:22:05