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

C#数组能否隐式改变大小?遭遇意外行为求助

问题解答

你遇到的情况核心原因是:数组本身的大小不可变,但数组变量可以重新指向新的数组,具体拆解如下:

  1. 初始代码uint[] numberList = new uint[8];

    • 这行创建了一个长度为8的uint数组对象,同时让变量numberList引用(指向)这个数组,此时numberList.Length返回8。
  2. 后续赋值numberList = [1,1,1,2,3,8,8,7,10,10,11];

    • 这里的[...]是C# 12新增的数组字面量语法,它会直接创建一个包含11个元素的全新uint数组对象。
    • 执行这行代码时,变量numberList的引用被更新——从原来的长度8数组,改为指向这个新的长度11数组。
    • 原来的长度8数组因为不再被任何变量引用,后续会被.NET垃圾回收器自动清理。
  3. 关于数组不可变性的正确理解

    • 你说的“C#数组大小通常不可变”是对的:一旦某个数组对象被创建,它的长度就固定了,无法直接修改(比如不能给已有数组添加/删除元素来改变长度)。但数组变量只是一个“指向数组的指针”,它可以随时切换指向其他数组对象,这和数组本身的不可变性并不冲突。

可以用一个简单类比理解:你一开始拿了个能装8杯水的杯子(旧数组),后来放下这个杯子,换了个能装11杯水的新杯子(新数组)——杯子本身的容量没变,但你手里的杯子换成了新的。

另外补充两个代码细节:

  • 你写了using static System.Random;但没用到Random的静态成员,注释里的new Random()如果要生成随机数,建议只创建一个Random实例,避免短时间内多次实例化导致生成重复随机数。
  • 数组字面量[...]仅在C# 12及以上版本可用,这也是你在.NET 8.0(对应C# 12)环境下能正常运行的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:01:02