在c#8中,向System名称空间添加两个新类型,如下所示:
System.Index
Run Code Online (Sandbox Code Playgroud)
和
System.Range
Run Code Online (Sandbox Code Playgroud)
这些课程的工作方式以及何时可以使用它们?
它们用于索引和切片。来自微软的博客:
索引:
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"
Run Code Online (Sandbox Code Playgroud)
范围(切片):
我们还引入了一个Range类型,该类型由两个Index组成,一个为开始,一个为结束,可以用x..y范围表达式编写。然后,可以使用Range进行索引以生成切片:
var slice = a[i1..i2]; // { 3, 4, 5 }
Run Code Online (Sandbox Code Playgroud)
您可以使用它们Array,String,[ReadOnly]Span和[ReadOnly]Memory类型,让你有一种方法能使得字符串:
string input = "This a test of Ranges!";
string output = input[^7..^1];
Console.WriteLine(output); //Output: Ranges
Run Code Online (Sandbox Code Playgroud)
您还可以省略范围的第一个或最后一个索引:
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
Run Code Online (Sandbox Code Playgroud)
您还可以将范围保存到变量中,并在以后使用它们:
Range r = 0..^1;
output = input[r];
Console.WriteLine(output);
Run Code Online (Sandbox Code Playgroud)