What is Range and Index types in c# 8?

倾然丶 夕夏残阳落幕 提交于 2020-01-21 06:51:27

问题


In c# 8 add two new types to System namespace as

System.Index 

and

System.Range

How work this classes and When can use them?


回答1:


They're used for indexing and slicing. From Microsoft's blog:

Indexing:

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"

Range (slicing):

We’re also introducing a Range type, which consists of two Indexes, one for the start and one for the end, and can be written with a x..y range expression. You can then index with a Range in order to produce a slice:

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

You can use them in Array, String, [ReadOnly]Span and [ReadOnly]Memory types, so you have another way to make substrings:

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

You can also omit the first or last Index of a Range:

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

You can also save ranges to varibles and use them later:

Range r = 0..^1;
output = input[r];
Console.WriteLine(output);



回答2:


Here's the recently-added overview of Index/Range in the .NET docs: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#indices-and-ranges




回答3:


System.Index Excellent way toindex a collection from the ending. (Which can be used to obtain the collection from the beginning or from the end).

System.Range Ranges way to access "ranges" or "slices" of collections. This will help you to avoid LINQ and making your code compact and more readable. (Access a sub-collection(slice) from a collection).

More Info in my articles:

https://www.c-sharpcorner.com/article/c-sharp-8-features/

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



来源:https://stackoverflow.com/questions/55167287/what-is-range-and-index-types-in-c-sharp-8

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!