获取数组的子集 - 为什么没有 Span<T>.Slice() 到 T[] 的只读重载?

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

我的库中有一个名为 ProcessSubset(double[] subset){}

的函数

我想分割一个更大的数组并将其传递给这个函数。但出于明显的性能原因,我不想复制内存,而且没有理由这样做。不幸的是 c# 做不到。

现在,子集只需只读。它仅用于只读数据处理。 .Net 似乎不支持这个基本功能。毕竟, double[] 只是指向内存的指针,因此显然能够以安全的方式对其进行切片,特别是如果它是只读的!

那么现在,有没有推荐的方法来使用不安全和指针来做到这一点?

c# .net
1个回答
0
投票

存在从 Span<T>

ReadOnlySpan<T>
隐式
转换。

void Main() {
    var foo = new int[] { 3, 4, 5 }.AsSpan().Slice(1);

    ReadOnlySpanFunc(foo); // implicit conversion
}


void ReadOnlySpanFunc(ReadOnlySpan<int> readOnlySpan) {
    foreach (var element in readOnlySpan) {
        Console.WriteLine(element);
    }
}


// 4,5
© www.soinside.com 2019 - 2024. All rights reserved.