📅  最后修改于: 2023-12-03 15:00:17.308000             🧑  作者: Mango
在C#8中,引入了一种新的运算符——范围运算符 ..
,它可以代替 Substring
方法和使用索引操作符的代码。除此之外,我们可以使用 Range
构造函数来创建一个范围。
范围是一个表示一段序列(数组或列表)中元素的起始位置和终止位置的类型。范围可以用作索引器的参数来提取序列的子段。
范围有两种创建方式:使用范围运算符 ..
和使用 Range
构造函数。
..
范围运算符 ..
的左侧是起始索引,右侧是终止索引,表示一个区间。如果省略左侧或右侧,则表示从序列的开头到末尾。
范围运算符示例:
int[] numbers = { 0, 1, 2, 3, 4, 5 };
var subArray = numbers[1..4]; // { 1, 2, 3 }
var lastTwo = numbers[^2..^0]; // { 4, 5 }
其中,第一个示例从索引 1 开始,到索引 4 指向之前的元素(也就是索引 3),截取了子数组 { 1, 2, 3 }
。第二个示例使用索引运算符 ^
,^1
表示数组的倒数第二个元素,^0
表示数组最后一个元素,截取了 { 4, 5 }
子数组。
Range
构造函数范围运算符 ..
是由 Range
构造函数创建的。Range
构造函数接受两个参数:一个包含范围开始位置的整数和一个不包括结束位置的整数。范围边界的结束位置将是第二个参数加 1。
下面是使用 Range
构造函数的示例:
int[] numbers = { 0, 1, 2, 3, 4, 5 };
var subArray = numbers[new Range(1, 4)]; // { 1, 2, 3 }
var lastTwo = numbers[new Range(^2, ^0)]; // { 4, 5 }
第一个示例和使用范围运算符的示例类似,传递给构造函数的参数是 new Range(1, 4)
,表示从索引 1 开始,到索引 4 指向之前的元素(也就是索引 3)结束。第二个示例类似地使用了索引运算符 ^
,new Range(^2, ^0)
表示从倒数第二个元素开始,到最后一个元素结束。
使用范围,在编写需要截取序列子段的代码时,与使用 Substring
方法和使用索引操作符相比,可以大大简化代码,使得代码更加易读易懂。