正如标题所说,我需要将int引用转换为字节数组

class ClassFoo {
    private byte[] _data;

    public ref byte GetByteRef(int index) {
        // ...Omitted for brevity
        return ref _data[index];
    }
    public ref int GetIntRef(int index) {
        // This won't work as it returns a integer value not reference
        return ref BitConverter.ToInt32(_data, index * 4);
    } 
}

我确信,在不切换到不安全环境的情况下,这是可能的.答案隐藏在下面的文档中的某个地方.

  1. Span
  2. MemoryMarshal
  3. Unsafe

但我没有找到它.任何帮助都是非常感激的.

推荐答案

首先,您可以使用MemoryMarshal.Castbyte范围转换为int范围.由于数组可隐式转换为跨度,因此您只需将数组插入其中:

var intSpan = MemoryMarshal.Cast<byte, int>(_data);

然后,您将获得您 Select 的SPAN索引的引用:

return ref intSpan[index];

或者,一气呵成:

return ref MemoryMarshal.Cast<byte, int>(_data)[index];

不需要指针.

Csharp相关问答推荐

C#将参数传递给具有变化引用的变量

在命令行中使用时安装,但在单击时不会安装

以自动方式注销Azure身份应用程序

Polly使用泛型重试和重试包装函数

S能够用DATETIME来计算,这有什么错呢?

如何使datagridview的列具有响应性,以便不是所有列都更改其宽度

Mongo作为.NET中Testcontainers的副本集

最新的Mediatr和具有同步方法的处理程序Handle:并非所有代码路径都返回值"

使用泛型可空类实现接口

反序列化私有成员

Swagger没有显示int?可以为空

Google OAuth令牌交换在.Net中不起作用

为什么我的伺服电机不动,下面的代码?

Azure Functions v4中的Serilog控制台主题

将FileStream的特定部分作为字节数组读取

如何让游戏对象在切换场景时被销毁,但在开始新游戏时重新锁定

用于获取字符串的最后12个字符的正则表达式(空格除外)

如何在ASP.NET Core 8中获取键控服务词典

并发表更新.EF核心交易

这是T自身的布尔表达式是什么意思?