Я пытался получить подстроку из строки, которую использую в своей программе, следующим образом:
mystring.Substring(mystring.Length - 4)
Visual Studio IntelliSense рекомендует использовать операторы индекса и диапазона следующим образом:
mystring[^4..]
Я просмотрел документацию здесь, и кажется, что использование только mystring[^4]
будет работать нормально. Почему IntelliSense рекомендует использовать дополнительный ..
, есть ли какие-то преимущества от его добавления?
Это хорошо объяснено. Возможно, вы захотите сделать больше, чем просмотреть документы. :)
попробуйте написать небольшую тестовую программу с обоими
^4
— это индекс, представляющий один индексный номер, который так уж получилось, что находится на расстоянии 4 от конца массива. По сути, это то же самое, что и mystring[0]
, только динамическое вычисление числа на основе длины.
^4..
— это диапазон, который означает все между (включительно) 4-м предпоследним индексом и концом массива.
var input = "abcdefghijk";
Console.WriteLine(input[^4]);
Console.WriteLine(input[^4..]);
Это печатает
h hijk
Оператор ..
используется для указания диапазона, а значения с обеих сторон используются для обозначения индексов.
Использование одного индекса даст одно значение, использование оператора ..
даст срез нескольких значений:
public static void Main()
{
var array = new int[] { 1, 2, 3, 4, 5 };
Console.WriteLine(array[^3].GetType());
// Equivalent to
// array[new Index(3, fromEnd: true)]
Console.WriteLine(array[^3..].GetType());
// Equivalent to
// array[Range.EndAt(new Index(3, fromEnd: true))]
}
Выходы
System.Int32 // notice the lack of []
System.Int32[]
^4 — один символ, ^4.. — строка