Soweit ich weiß, ist ein 2-D-Array genau wie ein 1-D-Array im Speicher angelegt, es verwendet lediglich eine andere Indizierung. Daher scheint es, dass es in C # einen Weg geben muss (wahrscheinlich unsicher), ein 1-D-Array in ein 2-D-Array zu konvertieren, ohne Elemente tatsächlich zu kopieren, vorausgesetzt, dass die Elemente aus dem 1-D-Array übersetzt werden sollen die 2-D-Anordnung in einer Reihe-zuerst-Weise. Ich habe herausgefunden, wie man das mit einem einzigen Kopierbefehl bewerkstelligen kann, aber es scheint immer noch mehr Verarbeitung als nötig zu sein:
%Vor%Gibt es eine Möglichkeit, dass ich C # sagen kann? Behandle dieses 1-D-Array stattdessen als 2D-Array mit diesen Dimensionen? Unsicherer Code ist in Ordnung. Wenn nicht, ist dies eine Einschränkung der Sprache oder gibt es ein grundlegendes Problem, das ich vermisse?
Eine Möglichkeit wäre, eine Klasse zu definieren, die auf das zugrunde liegende 1D-Array zugreift.
%Vor%Meine Indexierung könnte rückwärts sein, jedoch würde sich dies wie ein 2D-Array verhalten, während die 1D-Array-Referenz beibehalten wird.
edit: Indizierung war rückwärts, behoben.
Sie könnten versuchen, Buffer.BlockCopy
Es akzeptiert auch mehrdimensionale Arrays.
Verwenden Sie Marshal.PtrToStructure .
Ich konnte nicht herausfinden, wie es geht, ohne das 2d-Array in die Struktur einzufügen, aber das Folgende funktioniert ohne eine Kopie.
%Vor%