You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#范围运算符(Range Operator)为何使用[2..2]不会抛出异常?

关于C#范围运算符[x..y]返回空数组的原因

先看你的代码示例:

int[] array = { 10, 20, 30, 40, 50 };
int[] range = array[2..2]; // 得到空数组
int[] range2 = array[2..3]; // 得到包含一个元素30的数组

你已经理解范围运算符的上界是排他的,但困惑[2..2]为何没抛出异常反而返回空数组。核心原因是范围运算符的合法边界规则:当范围的起始索引大于等于结束索引时,会直接返回空集合,而非抛出异常。

具体逻辑:

  • 范围[start..end]选取的是所有满足start ≤ index < end的索引对应的元素
  • 当start == end时,没有任何索引能符合这个条件,结果自然是空数组
  • 哪怕是start > end的情况(比如array[3..2]),同样会返回空数组,不会触发越界异常

这种设计是为了让范围操作更灵活——在循环、动态计算范围等场景中,无需额外判断起始和结束的大小关系,避免冗余的边界检查代码。比如动态计算范围时,若结果出现起始等于结束的情况,返回空数组比抛出异常更贴合实际使用逻辑。

内容的提问来源于stack exchange,提问作者akTed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:47:02