gpt4 book ai didi

c# - 我应该如何从 Span/ReadOnlySpan 创建 ImmutableArray?

转载 作者:行者123 更新时间:2023-12-05 04:51:27 28 4
gpt4 key购买 nike

假设我有如下方法:

unsafe void Convert(byte* ptr, int length)
{
var span = new Span<byte>(ptr, length);
var arr = ImmutableArray.CreateRange(span); // error: cannot convert from 'System.Span<byte>' to 'System.Collections.Generic.IEnumerable<byte>'
Use(arr);
}

CreateRange上面示例中的方法是 CreateRange<T>(IEnumerable<T>)重载。由于 Span 没有实现任何接口(interface),因此我们无法进行此调用是有道理的。但实际上我有点不知道该怎么做。是否有一些惯用的方法可以通过最少的复制/分配从 Span 创建 ImmutableArray? (即使用 Span<T>.ToArray() 然后使用 ImmutableArray<T>.ToImmutableArray() 并不理想)

也将感谢任何涉及以某种方式直接使用指针+长度的建议。

最佳答案

有一个open issue (截至 2021 年 6 月)讨论为此添加 API。

在此之前,问题建议使用这样的构建器:

static ImmutableArray<T> ImmutableArrayFromSpan<T>(ReadOnlySpan<T> span)
{
var builder = ImmutableArray.CreateBuilder<T>(span.Length);
foreach (var i in span) {
builder.Add(i);
}
return builder.MoveToImmutable();
}

关于c# - 我应该如何从 Span/ReadOnlySpan 创建 ImmutableArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66912187/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com