c# - Wie kann ich von einem ReadOnlySpan in ein Array kopieren?

CorePress2024-05-09  5

How can I copy from a ReadOnlySpan to an Array?

Meine Klasse hat eine Eigenschaft public byte[] Location{get;} = new byte[30];

Ich möchte es aus einem ReadOnlySpan<byte> füllen können. aber ich kann keine API-Methoden finden, die dies ermöglichen.

Das nächstgelegene, das ich gefunden habe, ist:

var array = span.Slice(0,30).ToArray();
Array.Copy(array, Locations, 30);

Aber ein neues Array erstellen zu müssen, nur um daraus zu kopieren, scheint wirklich hässlich ... eine Array-Erstellung und zwei Kopien sind erforderlich. Ich könnte die Eigenschaft einstellbar machen, aber es ist nicht wirklich das beabsichtigte Design.

Übersehe ich eine offensichtliche Methode?



-----------------------------------

Haben Sie andere Lösungen für diese Aufgabe gefunden?

-----

Noch nicht - Ich lasse es, um etwas mehr Aufmerksamkeit zu erregen, sonst akzeptiere ich Ihre Antwort, die zumindest ein wenig erscheint besser als mein Ansatz :)

-----

Sie könnten ein Span<byte> Um Ihr Location-Array als Ziel festzulegen, verwenden Sie dann CopyTo für die Kopie:

var source = new ReadOnlySpan<byte>(Source).Slice(0, 30);
var target = new Span<byte>(Location, 0, 30); //Modify start & length as required

source.CopyTo(target);


-----------------------------------

Sehr schön, danke. Für mich ist das sogar (etwas) schneller als Buffer.BlockCopy() (was wiederum genauso schnell ist wie das „Entsichern“ nach memcpy. Ja, ich habe es einem Benchmarking unterzogen, weil ich es wissen musste... :) YMMV-| |+|-
Your guide to a better future - quark24
Your guide to a better future - quark24