What are Range and Index types in C# 8?

前端 未结 2 1705
执笔经年
执笔经年 2020-12-06 18:27

In C# 8, two new types are added to the System namespace: System.Index and System.Range.

How do they work and when can we use them?

相关标签:
2条回答
  • 2020-12-06 19:05

    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 variables and use them later:

    Range r = 0..^1;
    output = input[r];
    Console.WriteLine(output);
    
    0 讨论(0)
  • 2020-12-06 19:24

    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

    0 讨论(0)
提交回复
热议问题