在MsCorLib Array.cs源文件中,在第1941行有以下方法:
void Sort<T>(T[] array)
在第1948行的主体块中,有以下行
var span = new Span<T>(ref MemoryMarshal.GetArrayDataReference(array), array.Length);
如果我尝试在我的项目中复制粘贴这行代码,使用C#11和.NET7,会出现编译错误“参数1可能无法与'ref'关键字一起传递”
这怎么可能?我需要做什么来编译这行代码?
在MsCorLib Array.cs源文件中,在第1941行有以下方法:
void Sort<T>(T[] array)
在第1948行的主体块中,有以下行
var span = new Span<T>(ref MemoryMarshal.GetArrayDataReference(array), array.Length);
如果我尝试在我的项目中复制粘贴这行代码,使用C#11和.NET7,会出现编译错误“参数1可能无法与'ref'关键字一起传递”
这怎么可能?我需要做什么来编译这行代码?
1条答案
按热度按时间cl25kdpy1#
它使用内部
Span<T>
构造函数,该构造函数不是公开可用的:因此,“外部”编译器只有ctor和2个参数可用-
Span<T>(Void*, Int32)
需要指针,而不是ref
参数,因此编译错误。正如在源代码中的注解中提到的-您可以使用
MemoryMarshal.CreateSpan
作为替代。