I know that there is already a question about converting a multidimensional array into a one dimensional one, but all of the answers to it are inefficient. All of them are based around making a copy of the array, which is unnecessary. A multidimensional array (not jagged) is stored in a contiguous block of memory, so converting back and forth between a one dimensional interpretation of this block and a multidimensional interpretation should not involve copying the whole array, but instead should be essentially free. It should actually be possible to have the two arrays share the same memory, so that when one gets updated, the other one also does.
Can this be done in C#?