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

C#中Array.Length属性的返回值是否可能为负数?

C#数组的Length属性是否可能返回负值?

核心结论

正常开发场景下,绝对不可能获取到System.Array.Length的负返回值,你完全可以放心地在循环遍历前跳过负数检查。

详细说明

  1. 合法数组的Length必然非负
    CLR在创建数组时会严格校验长度参数:
  • 如果你尝试用负数初始化数组(比如new int[-1]),编译时或运行时会直接抛出ArgumentOutOfRangeException,根本不会生成合法的数组实例。
  • 所有框架提供的数组实例(比如Array.Empty<T>()、集合转换而来的数组等),其Length属性始终是0或正整数。
  1. 所谓“负Length”的极端场景
    你提到的那种出现负Length的情况,属于内存损坏或未定义行为:
  • 通常是通过unsafe代码直接篡改了数组对象的内部内存结构,破坏了CLR对数组的管理状态。
  • 或是特定版本的.NET运行时/编译器存在bug(这类问题会被官方快速修复,不会成为普遍情况)。
    这类场景不属于常规开发的范畴,也不是框架设计允许的正常状态,无需作为日常编码的考量因素。

补充提示

虽然Length的返回类型是int(而非uint),但这是.NET框架的设计选择(比如兼容跨语言交互、避免uint带来的类型转换麻烦等),但从设计上就保证了返回值不会为负,所以日常写for (int i = 0; i < array.Length; i++)这类代码是完全安全的,不需要额外判断array.Length >= 0。


内容的提问来源于stack exchange,提问作者Pascal Laferrière

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:05:26