C# 11 addresses the first issue by adding the required fields/properties: such members must have their values set upon instantiation.
For the second one, the ^1 index stands for length-1, which is the last element's index. With ^0 the compiler should implicitly add 1 every time an index is accessed.