Что такое тип Range и Index в c # 8? - PullRequest
5 голосов
/ 14 марта 2019

В c # 8 добавьте два новых типа в пространство имен системы как

System.Index 

и

System.Range

Как работают эти классы и когда их можно использовать?

Ответы [ 3 ]

7 голосов
/ 14 марта 2019

Они используются для индексации и нарезки.Из блога Microsoft :

Индексация:

Index i1 = 3;  // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"

Диапазон (нарезка):

Мы также вводим тип диапазона,который состоит из двух индексов, одного для начала и одного для конца, и может быть записан с помощью выражения диапазона x..y.Затем вы можете индексировать с помощью Range, чтобы получить срез:

var slice = a[i1..i2]; // { 3, 4, 5 }

Вы можете использовать их в типах Array, String, [ReadOnly]Span и [ReadOnly]Memory, так что выесть другой способ сделать подстроки:

string input = "This a test of Ranges!";
string output = input[^7..^1];
Console.WriteLine(output); //Output: Ranges

Вы также можете опустить первый или последний индекс диапазона:

output = input[^7..]; //Equivalent of input[^7..^0]
Console.WriteLine(output); //Output: Ranges!

output = input[..^1]; //Equivalent of input[0..^1]
Console.WriteLine(output); //Output: This a test of Ranges

Вы также можете сохранить диапазоны в переменных и использовать их позже:

Range r = 0..^1;
output = input[r];
Console.WriteLine(output);
2 голосов
/ 14 марта 2019

Вот недавно добавленный обзор Index / Range в .NET документах: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#indices-and-ranges

0 голосов
/ 25 марта 2019

System.Index Отличный способ индексировать коллекцию из финала. (Который может быть использован для получения коллекции с начала или с конца).

System.Range Диапазоны способ доступа к «диапазонам» или «кусочкам» коллекций. Это поможет вам избежать LINQ и сделает ваш код компактным и более читабельным. (Доступ к подколлекции (срезу) из коллекции).

Подробнее в моих статьях:

https://www.c -sharpcorner.com / статьи / с-диез-8-функции /

https://www.infoq.com/articles/cs8-ranges-and-recursive-patterns

...