Index and Range

int[] arr = new int[]{3, 6, 7, 9};Console.Console.WriteLine(arr[0]); // 3
Index i = 1;
Console.WriteLine(arr[i]); // 6
Console.WriteLine(arr[(Index)1]); // 6
Index j = ^1;
Console.WriteLine(arr[j]); // 9
Console.WriteLine(arr[new Index(^, fromEnd: true)]); // 9

Range range = 1..3;
int[] arr = new int[]{1, 2, 3, 4, 5};
int[] result = arr[range]; // result now contains: [2, 3]

Range range = 2..^0;
int[] arr = new int[]{1, 2, 3, 4, 5};
int[] result = arr[range]; // result now contains: [3, 4, 5]

int[] arr = new int[]{1, 2, 3, 4, 5};
int[] result = arr[1..]; // result now contains: [2, 3, 4, 5]
int[] result2 = arr[..^1]; // result now contains: [1, 2, 3, 4]
int[] result3 = arr[..]; // result now contains all: [1, 2, 3, 4, 5]

var baseString = "Hello";
var baseSpan = baseString.AsSpan();
Console.WriteLine(baseSpan[1..3].ToString()); // el

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges