Изменения в новых версиях / C# 8.0

using System;

int[] numbers = { 
    // index from start    index from end
    2,    // 0                   ^5
    3,    // 1                   ^4
    5,    // 2                   ^3
    7,    // 3                   ^2
    11    // 4                   ^1
};

//before:
var last = numbers[numbers.Length - 1];
//last is 11
var penultimate = numbers[numbers.Length - 2];
//penultimate is 7

Console.WriteLine("last: " + last);
Console.WriteLine("penultimate: " + penultimate);

//in version 8:
last = numbers[^1];
//last2 is 11
penultimate = numbers[^2];
//penultimate2 is 7

Console.WriteLine("last: " + last);
Console.WriteLine("penultimate: " + penultimate);


Индекс 0 совпадает с sequence[0]. Индекс ^0 совпадает с sequence[sequence.Length]. Обратите внимание, что sequence[^0] создает исключение так же, как и sequence[sequence.Length]. Для любого числа n индекс ^n совпадает с sequence.Length - n.