I’m currently using Array.Copy to shift an array as such:
Array.Copy(array, 0, array, 1, array.Length - 1);
It’s noticeable faster than using a loop. I know that similar functions in other languages (eg. memcpy) are undefined or sometimes break when the compiler gets too aggressive. Is it reasonable to consider this safe in .NET?
Yes, it is safe. It is documented how the method should behave in this case: