首页 > 解决方案 > 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 示例,但它无法编译。

标签: c#rabbitmq

解决方案


您不能将只读的东西放入类型为 的插槽中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);

推荐阅读