C# 范围和索引(Ranges and Indices) - ..和^操作符


C# 的范围(..)和索引(^)操作符是语法糖,^n 表示从末尾数第 n 个,等价于 length - n;.. 创建左闭右开区间,支持 int 和 Index 类型,需目标类型提供 Range 索引器,常见于数组、字符串、Span。

c# 范围和索引(ranges and indices) - ..和^操作符

C# 的范围(..)和索引(^)操作符是 C# 8.0 引入的语法糖,让数组、字符串、Span 等支持索引的类型更简洁地表达“取某一段”或“从末尾数第几个”,不用再手动算长度。

^ 表示从末尾开始的索引

^n 等价于 length - n,其中 n 是正整数。它不是负数索引,而是一个独立的索引类型 System.Index

  • array[^1] 取最后一个元素,等价于 array[array.Length - 1]
  • array[^3] 取倒数第三个,等价于 array[array.Length - 3]
  • ^0 是合法的,但对应的是 length - 0,即越界位置(常用于范围的右边界)

.. 表示范围(Range)

start..end 创建一个 System.Range,表示从 start(含)到 end(不含)之间的子序列。start 和 end 都可以是 intIndex

  • str[2..5] 取下标 2、3、4 的字符(共 3 个)
  • arr[..3] 取前 3 个元素(等价于 0..3
  • arr[3..] 取从下标 3 到末尾(等价于 3..arr.Length
  • arr[^3..^1] 取倒数第 3 个(含)到倒数第 1 个(不含),也就是倒数第 3 和第 2 个

底层其实是 RangeIndex 类型

编译器会把 ^n 转成 new Index(n, fromEnd: true),把 a..b 转成 new Range(new Index(a), new Index(b))。目标类型必须提供接受 Range 的索引器(如 string.this[Range]T[] this[Range])才能使用。

TabTab AI TabTab AI

首个全链路 Data Agent,让数据搜集、处理到深度分析一步到位。

TabTab AI 292 查看详情 TabTab AI
  • 内置支持的类型包括:数组(T[])、stringSpan<t></t>ReadOnlySpan<t></t>
  • 自定义类型要支持,需定义形如 public T[] this[Range range] => ... 的索引器
  • 注意:Range 本身不执行越界检查,实际切片时由目标类型的索引器负责校验

常见误区和注意事项

这些操作看着简单,但容易踩坑:

  • ^0 不是最后一个元素,而是“长度位置”,用作范围右边界时才自然(如 [2..^0] 表示从 2 到末尾)
  • arr[^5..^2] 要求数组长度 ≥ 5;如果长度只有 3,^5 就会抛 IndexOutOfRangeException
  • 范围不支持反向(如 5..2),也不支持步长(不能写 [..^1 by 2])——那是 LINQ 的事
  • 字符串使用范围返回的是新字符串(不可变),不是视图;而 Span 返回的是原内存的只读视图

基本上就这些。写起来清爽,读起来直观,只要记住 ^n 是“倒数第 n 个”,.. 是“左闭右开”,再配合类型是否真正支持,就很少出错。

以上就是C# 范围和索引(Ranges and Indices) - ..和^操作符的详细内容,更多请关注其它相关文章!


# 几个  # 影响网站建设价格因素  # 宁波seo教程推广产品  # 天津软件推广招聘网站  # 贵阳网站seo优化网站  # 十堰专业网站优化  # 抖音扫码营销推广  # 苏州微信商城网站建设  # 灵丘企业网站推广  # seo关键词排名71金手指效率  # 公司宣传片营销推广  # c#  # 看着  # 转成  # 开源  # 如何处理  # 如何使用  # 不含  # 中文网  # 死锁  # 的是  # 范围和索引 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  快递查询,一键速查  VS Code的时间线(Timeline)视图:您的代码时光机  《糖豆》添加舞曲方法  知音漫客官网首页入口_知音漫客热门漫画推荐  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  如何用Golang优化微服务间请求性能_Golang 微服务请求性能优化方法  微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态  英雄联盟争者留名活动介绍  键盘测试软件哪个好_键盘故障检测工具推荐  优化响应式标题底部边框:CSS实现技巧与最佳实践  使用VS Code作为你的个人知识管理系统  4399小游戏下装链接 4399小游戏下载链接入口  苹果官网国补入口在哪  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  无人机考证官网 中国民航无人机考证官网登录入口  《鹿路通》退余额方法  PHP页面重载时变量值不重置的实现方法  中大网校app做题记录清除方法  Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  申通快递物流信息查询 申通快递包裹状态追踪  CDR如何复制交互式填充色  处理含命名空间的XML文件 Power Query中的高级技巧  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  从J*a应用程序中导出MySQL表数据的技术指南  vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  《procreate》绘制渐变效果教程  外卖小程序对接第三方配送  餐馆菜篮选购指南  Highcharts雷达图轴线交点数值标注指南  c++如何链接Boost库_c++准标准库的集成与使用  盲鳗善于分泌黏液猜猜主要用来做什么  暴风影音官网正式版_暴风影音手机版官网下载安卓  @Team是什么?揭秘团队含义  J*aScript模块加载器_RequireJS原理分析  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  抖音商城官网是什么_抖音商城官方网址与访问方法  J*aScript 数值去小数位处理:多种方法与实践  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  qq音乐官方网站入口_qq音乐在线听歌网页版链接  J*aScript:从子元素中批量移除特定CSS类  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】  Google Drive API 认证:服务账户与OAuth 2.0的选择与实践  c++如何实现观察者设计模式_c++行为型设计模式实战 

 2025-12-06

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.