C# 7 里面出现了Span这个数据类型,它能够表示另外一个数据结构里连续相邻的一串数据,而且它是内存安全的。 安全
例子: 数据结构
这个图的输出是3,4,5,6。 spa
而C# 8里面咱们能够从一个序列里面很简单的提取出来一个子范围组成新的序列。 设计
看例子: orm
这里面使用了范围运算符“..”。 xml
arr[2..4]表示把arr这个序列,从索引为2的元素一直到索引为4(但不包括索引4)的元素提取出来组成新的序列。因此结果就是3,4。 索引
也能够直接建立Range类型的变量: 内存
这段代码的输出结果和上面是同样的。 文档
直接看例子: get
这里使用了末尾运算符(Hat运算符) ^ 和 Index这个类型。
这里面的 ^2 表示从序列的倒数第二个元素,也就是从末尾开始算的第二个元素。因此输出是9。
而若是你使用arr[^0]的话就会抛出IndexOutOfRangeException,arr[^0] 和 arr[arr.Length] 是一个意思。
这确实有点容易让人混淆,但其实其它语言也差很少是这样设计的,例如 -1 这个索引表示最后一个元素。
Range和Index常常组合着使用。
例如:
这里arrTwin和arr的元素是彻底同样的。
这里还能够更简化一下写法:
arrTwin 就是 arr 完整的拷贝。
下面这三种写法的效果是同样的:
再次强调,Range的范围包含Start不包含End。
因此索引为0的元素包含,索引为10或者^0的元素不包含(尽管也不存在)。
其它一些例子:
单独使用Range或Index的例子:
这个输出结果是5,6,7。
Range类型;
必定要注意Range的范围包括Start不包括End。
Range运算符:..
Index类型;
从头开始的索引是从0开始的
从尾部开始的索引是从1开始的,与序列的长度相关。
Hat 运算符:^