C# 将 ReadOnlyMemory<byte> 转换为 byte[]

标签 c# rabbitmq

给定 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);

它给出了以下错误。我正在使用最新的 C# 和 .NET CORE 3.1

enter image description here

这很有趣,因为我实际上是复制粘贴 Hello World 示例 of a major product called RabbitMQ它不编译。

最佳答案

您不能将只读内容放入类型为 byte[] 的插槽中。 , 因为 byte[] s 是可写的,这会破坏目的。看起来像RabbitMQ changed their API in February并且可能忘记更新示例代码。

一个快速的解决方法是使用 .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);

关于C# 将 ReadOnlyMemory<byte> 转换为 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61374796/

相关文章:

c# - 垂直显示 GridView 中的项目?

c# - 异常时重新排队消息

java - Heroku 上的 Spring 和 CloudAMQP 给出 "Unknown Host Exception"

erlang - 简单的rabbitmq erlang消息直接队列 getter 的奇怪问题

C# 表达式主体推断?

c# - 自动将 URL 查询参数键转换为 kebab-case?

c# - 检查方法的实例是否已经执行

java - 如何修复后续请求中的错误 "Only one ConfirmCallback is supported by each RabbitTemplate"

Rabbitmq + Web stomp 插件与 rpc - 回复

c# - 使用自定义属性获取程序集中的所有类型