从末尾运算符 ^ 开始索引

^ 运算符在 C# 8.0 和更高版本中提供,指示序列末尾的元素位置。

  • 对于长度为 length 的序列,^n 指向与序列开头偏移 length - n 的元素。

例如:

  • ^1 指向序列的最后一个元素,
  • ^length 指向序列的第一个元素。
int[] xs = new[] { 0, 10, 20, 30, 40 };
int last = xs[^1];
Console.WriteLine(last);  // output: 40var lines = new List<string> { "one", "two", "three", "four" };
string prelast = lines[^2];
Console.WriteLine(prelast);  // output: threestring word = "Twenty";
Index toFirst = ^word.Length;
char first = word[toFirst];
Console.WriteLine(first);  // output: T

如前面的示例所示,表达式 ^e 属于 System.Index 类型。
在表达式 ^e 中,e 的结果必须隐式转换为 int。

还可以将 ^ 运算符与范围运算符一起使用以创建一个索引范围。


范围运算符 .

… 运算符在 C# 8.0 和更高版本中提供,指定索引范围的开头和末尾作为其操作数。

  • 左侧操作数是范围的包含性开头。
  • 右侧操作数是范围的包含性末尾。

任一操作数都可以是序列开头或末尾的索引,如以下示例所示:

int[] numbers = new[] { 0, 10, 20, 30, 40, 50 };
int start = 1;
int amountToTake = 3;
int[] subset = numbers[start..(start + amountToTake)];
不包含 下标=4
Display(subset);  // output: 10 20 30int margin = 1;
int[] inner = numbers[margin..^margin];
//[ 下标1-4,不包含最后一个数字 => ^-1=下标5]
Display(inner);  // output: 10 20 30 40string line = "one two three";
int amountToTakeFromEnd = 5;
Range endIndices = ^amountToTakeFromEnd..^0;
string end = line[endIndices];
Console.WriteLine(end);  // output: threevoid Display<T>(IEnumerable<T> xs) => Console.WriteLine(string.Join(" ", xs));

如前面的示例所示,表达式 a…b 属于 System.Range 类型。 在表达式 a…b 中,a 和 b 的结果必须隐式转换为 int 或 Index。

可以省略 … 运算符的任何操作数来获取无限制范围:

a.. 等效于 a..^0
..b 等效于 0..b
.. 等效于 0..^0
int[] numbers = new[] { 0, 10, 20, 30, 40, 50 };
int amountToDrop = numbers.Length / 2;int[] rightHalf = numbers[amountToDrop..];
Display(rightHalf);  // output: 30 40 50int[] leftHalf = numbers[..^amountToDrop];
Display(leftHalf);  // output: 0 10 20int[] all = numbers[..];
Display(all);  // output: 0 10 20 30 40 50void Display<T>(IEnumerable<T> xs) => Console.WriteLine(string.Join(" ", xs));

运算符可重载性

.、()、^ 和 … 运算符无法进行重载。 [] 运算符也被视为非可重载运算符。 使用索引器以支持对用户定义的类型编制索引。

末尾运算符 ^和范围运算符 .相关推荐

  1. MySQL运算符(逻辑运算符,比较运算符,位运算符)

    MySQL的运算符包括: 算术运算符 (类似数学中的 + - * /),在此基础上增加取余,也就是模运算,比较运算符,逻辑运算符,非符号运算符,位运算符. 本次重点讲解 逻辑运算符,和比较运算符,非符 ...

  2. Go 学习笔记(5)— 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符

    1. Go 运算符分类 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 1.1 算术运算符 下表列出了所有Go语言的算术运算符.假定 A 值为 10, ...

  3. Python中is同一性运算符和==相等运算符区别

    2019独角兽企业重金招聘Python工程师标准>>> 在区分is和==这两种运算符区别之前,需要知道Python中对象包含的三个基本要素,分别是:id(身份标识).type(数据类 ...

  4. python运算符(算数运算符、赋值运算符、复合赋值运算符、比较运算符、逻辑运算符)

    常见的运算符: 算数运算符 赋值运算符 复合赋值运算符 ⽐较运算符 逻辑运算符 1. 算数运算符 注意:         混合运算优先级顺序: () ⾼于 ** ⾼于 * / // % ⾼于 + - ...

  5. Swift中空合运算符、闭区间运算符、单侧区间、半开区间

    空合运算符(Nil Coalescing Operator) 用于取代3目判空运算,提供超短的写法 比如常规判空写法如下,反正我写java就是这么干的 var anOptionalInt: Int? ...

  6. linux脚本或关系表达,Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等...

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  7. oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询...

    oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询博客分类: oracle OracleSQL 比较运算符 >,<:大于,小于 >=. ...

  8. C++语言之可重载运算符/不可重载运算符

    下面是可重载的运算符列表: 双目算术运算符 + (加),-(减),*(乘),/(除),% (取模) 关系运算符 ==(等于),!= (不等于),< (小于),> (大于),<=(小于 ...

  9. java if赋值语句_Java基础第3天+运算符(算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符)、Scanner键盘录入、if语句...

    1:运算符(掌握) (1)算术运算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区别 数据做除法操作的时候,/取得是商,%取得是余数 D:++ ...

最新文章

  1. poj 1950 Dessert(dfs枚举,模拟运算过程)
  2. java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制
  3. opencv 图像访问索引
  4. STM32----TIM6和TIM7
  5. Hadoop2.x介绍与源代码编译
  6. Bailian2854 点和正方形的关系【水题】
  7. MyEclipse10破解详解过程
  8. SAP SD pricing condition技术在系统里的一些练习
  9. The error occurred while setting parameters
  10. 阿里妈妈年赚2500亿:淘宝商家的“曝光焦虑”生意好做吗?
  11. php checkbox默认选择问题,PHP_php select,radio和checkbox默认选择的实现方法,这是扩展yibing的select默认选择 - phpStudy...
  12. Automated defect inspection system for metal surfaces based on deep learning and data augmentation
  13. 基于STM32(HAL库)的水质检测(浑浊度、PH值、温度、手机APP显示、wifi上云)
  14. 如何查看已安装的Linux内核
  15. linux_时区修改
  16. 在linux环境下测试和使用aria2c
  17. 图解pandas的数据合并merge
  18. 直播预告 | ICLR专场二
  19. 基于landsat7数据的TDVI指标计算
  20. 反向传播算法(BP算法)学习总结

热门文章

  1. CAMP模型——估计资本成本的模型
  2. Luminati代理动态IP,海量资源可调用!
  3. mysql自然连接的例题详解_基于 MySQL 的数据库实践(自然连接)
  4. 马尔可夫过程(Markov Process)和马尔可夫链
  5. hdu 5418 Victor and World (floyd+状压dp)
  6. Monte Carlo Integration 蒙特卡罗方法求积分 附简单例题+代码
  7. csdn首篇笔记——关于笔记本身
  8. 戴口罩人脸识别、高精度人脸识别解决方案
  9. Unity3D 网页插件Embedded Browser(ZFBrowser)PC端打包文件无法加载网页解决方法
  10. Google 宣布 GSoC 2014 计划Fwd: Google Summer of Code 2014 + 10 Things