新闻中心

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

2025-12-06
浏览次数:
返回列表
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])才能使用。

Openflow Openflow

一键极速绘图,赋能行业工作流

Openflow 88 查看详情 Openflow
  • 内置支持的类型包括:数组(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) - ..和^操作符的详细内容,更多请关注其它相关文章!


# c#  # 如何在  # 汽车seo软文批量发布  # 卡饭网 seo  # 米课seo线下课价格  # 唐山网站快速优化排名  # 抖音seo精准搜索  # 株洲网站建设招标说明书  # 昆明网站seo优化一年多少价格  # 贵阳网站推广微信hfqjwl  # 白酒二维码营销推广  # 宁夏seo公司是什么  # 那是  # 也不  # 就会  # 几个  # 看着  # 转成  # 不含  # 长时间  # 的是  # 范围和索引 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Mac终端命令大全_Mac常用Terminal指令速查  “音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!  漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  4399体育竞技小游戏_4399小游戏赛事入口  优化HTML表单样式:解决输入框焦点跳动与元素间距问题  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  Discord Slash 命令响应超时问题的异步解决方案  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  CSS图片焦点样式实现教程:理解与应用tabindex属性  poki网页游戏推荐_poki免费游戏平台入口  从J*aScript对象中精确提取指定属性的教程  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  抖音怎么赚钱_抖音创作者变现方法与途径指南  J*aScript Promise链中如何正确终止后续.then执行并处理错误  黑猫投诉统一入口官网 消费者权益保护投诉平台  响应式容器内容自动缩放与宽高比维持教程  iwriter统一登录平台 iwrite账号密码登录页面  Win10双系统截图高效法 截屏快捷键速记【技巧】  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  内存疯狂猛猛涨价:主板销量直接腰斩!  J*aScript数据结构转换:将对象数组按类别分组  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  解决J*aScript中重复选择项的确认对话框显示问题  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  学习通网页版快速入口 学习通官网网页版直接打开  从OpenAI API响应中高效提取生成文本  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  网站内容防复制粘贴的实现策略与局限性  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  必由学登录入口 必由学官方网站在线访问链接  windows10怎么查看本机ip_windows10命令提示符ipconfig使用  J*aScript DOM操作:高效清空列表元素的策略与实践  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  C++ explicit关键字防止隐式转换_C++构造函数安全规范  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  qq游戏网页版直接玩_qq游戏免下载快速入口  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置 

搜索