小编net*_*fan的帖子

需要一种解决方法来访问返回 IEnumerable 的函数内的 ReadOnlySpan<T>

在处理本机代码互操作性时,我决定是时候学习和尝试 C# 语言的新 Span 功能了。

尽管进行了多次试验,一切都进展顺利,直到我到达我的很长函数的最后阶段,我在下面插入了一个最小的可重现示例:

[DllImport(dll, SetLastError = true)]
internal static extern void GetNativeData(out byte lpBuffer, int size, out bytesRead);

ReadOnlySpan<T> ReadArray<T>(ReadOnlySpan<byte> buf, int Length) where T : unmanaged
{
    var size = Length * Unsafe.SizeOf<T>();
    if (buf.Length < size)
        buf = new byte[size];
        GetNativeData(out MemoryMarshal.GetReference(buf), size, out int read));
        Dh.CreateError(ReadMemoryErr);

    return MemoryMarshal.Cast<byte, T>(buf.Slice(0, size));
}

static IEnumerable<MyClass> GetResult()
{
    // Here I allocate a buffer
    Span<byte> buf = new byte[1000];

    // After a long serie of calls to …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable yield-return .net-core

8
推荐指数
1
解决办法
7203
查看次数

标签 统计

.net-core ×1

c# ×1

ienumerable ×1

yield-return ×1