gpt4 book ai didi

c# - ReadOnlySpan 和 IReadOnlyList 之间是否有任何通用接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 11:45:58 24 4
gpt4 key购买 nike

我想知道当两者都ReadOnlySpan<T>时是否有任何界面、模式或其他什么东西和 IReadOnlyList<T> (以及更通用的接口(interface)),并且您希望避免无用的分配 .

考虑使用 IEnumerable<T> 的这种方法,但不介意实际功能:

    public byte Compute(IEnumerable<byte> buffer)
{
unchecked
{
byte lrc = 0;
foreach (byte cell in buffer)
{
lrc ^= cell; //just an example
}
return lrc;
}
}

计算是在一系列字节上进行的(即使有时我需要一个索引/随机访问流)。因此,序列可以是一个数组、它的一个片段或任何可枚举的源。

到目前为止,我无法找到一种体面的方法来概括方法签名(甚至接受一些重载作为转换),而无需实际分配数组或“重”的东西。

对即将到来的 .Net Standard 2.1 有什么计划吗?

最佳答案

到目前为止,这似乎是我发现的最不丑陋的解决方案:

    public byte Compute(IEnumerable<byte> buffer)
{
unchecked
{
byte lrc = 0;
foreach (byte cell in buffer)
{
this.ComputeCore(ref lrc, cell);
}
return lrc;
}
}


public byte Compute(ReadOnlySpan<byte> span)
{
unchecked
{
byte lrc = 0;
foreach (byte cell in span)
{
this.ComputeCore(ref lrc, cell);
}
return lrc;
}
}

private void ComputeCore(ref byte acc, byte cell)
{
acc ^= cell;
}

当然,只有当核心功能变得比描述的更复杂时才值得。

关于c# - ReadOnlySpan<T> 和 IReadOnlyList<T> 之间是否有任何通用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567192/

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