Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

rabbitmq - C# Convert ReadOnlyMemory<byte> to byte[]

Given ReadOnlyMemory Struct I want to convert the stream into a string

I have the following code:

var body = ea.Body; //ea.Body is of Type ReadOnlyMemory<byte>
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);

And it gives the following error. I am using the latest C# with .NET CORE 3.1

enter image description here

Which is funny because I am literally copy pasting the Hello World example of a major product called RabbitMQ and it doesn't compile.

question from:https://stackoverflow.com/questions/61374796/c-sharp-convert-readonlymemorybyte-to-byte

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You cannot drop a thing that's read-only into a slot typed as byte[], because byte[]s are writable and that would defeat the purpose. It looks like RabbitMQ changed their API in February and perhaps forgot to update the sample code.

A quick workaround is to use .ToArray():

var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);

Edit: Since this was accepted, I'll amend it with the better solution posed by Dmitry and zenseb which is to use .Span:

var body = ea.Body.Span;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...