c# - C# 转换 ReadOnlyMemory到字节[]
问题描述
给定ReadOnlyMemory Struct我想将流转换为字符串
我有以下代码:
var body = ea.Body; //ea.Body is of Type ReadOnlyMemory<byte>
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
它给出了以下错误。我正在使用带有 .NET CORE 3.1 的最新 C#
这很有趣,因为我实际上是在复制粘贴名为 RabbitMQ 的主要产品的 Hello World 示例,但它无法编译。
解决方案
您不能将只读的东西放入类型为 的插槽中byte[]
,因为byte[]
s 是可写的,这会破坏目的。看起来 RabbitMQ在 2 月份更改了他们的 API,并且可能忘记更新示例代码。
一个快速的解决方法是使用.ToArray()
:
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
编辑:既然这被接受了,我会用 Dmitry 和 zenseb 提出的更好的解决方案来修改它.Span
:
var body = ea.Body.Span;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
推荐阅读
- python - Python中的正则表达式替换列表中的项目
- php - 使用 .htaccess 文件为自定义 URL 设置 php_value
- scala - 加快 spark 数据帧 groupBy
- selenium - 为正在执行的每个功能打开新的浏览器 - WATIR
- numpy - 给定我知道最大值的位置 X,在直方图中找到最大 Y 值
- android - 房间存在时找不到布尔列
- mysql - 从表中获取所有行并按条件连接另一个表中的一些行
- android - 自定义视图组件未显示在屏幕截图中
- python-3.x - 如何在pyglet中制作立方体
- c++ - 游戏开发 - 项目 - 类型的枚举或继承