给定 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
这很有趣,因为我实际上是复制粘贴 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/