MsCorLib Array.cs Array.Sort 未编译的代码行

问题描述 投票:0回答:1

在 MsCorLib Array.cs 源文件中,第 1941 行有以下方法:

void Sort<T>(T[] array)

在第 1948 行的正文块中有以下行

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

如果我尝试使用 C# 11 和 .NET 7 在我的项目中复制粘贴此行,则会出现编译错误“参数 1 可能无法通过‘ref’关键字传递”

这怎么可能?我必须做什么才能编译这一行?

c# .net visual-studio memory-management
1个回答
1
投票

它使用不公开的内部

Span<T>
构造函数

#pragma warning disable IDE0060 // https://github.com/dotnet/roslyn-analyzers/issues/6228
// Constructor for internal use only. 
// It is not safe to expose publicly, 
// and is instead exposed via the unsafe MemoryMarshal.CreateSpan.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal Span(ref T reference, int length)
{
    Debug.Assert(length >= 0);
 
    _reference = ref reference;
    _length = length;
}
#pragma warning restore IDE0060 // https://github.com/dotnet/roslyn-analyzers/issues/6228

在您的代码中,编译器只有带有 2 个可用参数的 ctor -

Span<T>(Void*, Int32)
,它需要指针,而不是
ref
参数,因此会出现编译错误。

© www.soinside.com 2019 - 2024. All rights reserved.