gpt4 book ai didi

c# - 创建一个不复制的 ImmutableArray

转载 作者:行者123 更新时间:2023-11-30 13:35:33 25 4
gpt4 key购买 nike

有什么方法(可能是肮脏的 hack)来创建一个只使用指定数组而不是复制它的 ImmutableArray?

我有一个我知道不会改变的数组,我想创建一个 ImmutableArray 以允许客户端安全地访问我的数组。

查看 source code for ImmutableArray ,我看到 Create 方法无济于事:

public static ImmutableArray<T> Create<T>(params T[] items)
{
if (items == null)
{
return Create<T>();
}

// We can't trust that the array passed in will never be mutated by the caller.
// The caller may have passed in an array explicitly (not relying on compiler params keyword)
// and could then change the array after the call, thereby violating the immutable
// guarantee provided by this struct. So we always copy the array to ensure it won't ever change.
return CreateDefensiveCopy(items);
}

编辑:GitHub 上正好有此功能的请求,这也提供了最快的破解方法:https://github.com/dotnet/corefx/issues/28064

最佳答案

如果知道数组的确切长度,可以使用 ImmutableArray.CreateBuilder<>加上 .MoveToImmutable() 这将创建一个 ImmutableArray<>来自 Builder 的内部结构不复制它:

var builder = ImmutableArray.CreateBuilder<int>(4);
builder.Add(1);
builder.Add(2);
builder.Add(3);
builder.Add(4);
ImmutableArray<int> array = builder.MoveToImmutable();

方法.MoveToImmutable()如果 builder.Capacity != builder.Count 将抛出异常

请注意,构建器的其他方法(如 .ToImmutable() )将创建数组的副本。

关于c# - 创建一个不复制的 ImmutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51300066/

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