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

C#中System.Int32[*]数组类型是什么?能否使用?

关于一维自定义下界数组(System.Int32[*])的说明

1. System.Int32[*]是什么类型?

System.Int32[*]是CLR支持的一维非零基数组类型,和我们常用的int[](零基一维数组)属于不同的数组子类型。

在CLR的类型系统中,数组分为两类:

  • 零基数组:比如int[]、string[],索引固定从0开始,C#语法对其有完整的语法糖支持(直接用[]索引)。
  • 非零基数组:包括一维自定义下界数组(类型标识带[*])和多维自定义下界数组,这类数组的起始索引可指定为任意整数,但C#语法对一维非零基数组的直接支持非常有限。

2. 能否使用System.Int32[*]类型的数组?

可以使用,但无法像常规int[]那样用foo[1]这类语法直接索引,需要通过Array类的内置方法操作:

示例代码:

// 创建起始索引为1、长度为10的一维int数组
var foo = Array.CreateInstance(typeof(int), [10], [1]);

// 赋值:调用SetValue(值, 索引)
foo.SetValue(100, 1);
foo.SetValue(200, 10); // 最大索引为10(1+10-1)

// 取值:调用GetValue(索引),需强制转换为对应类型
var val1 = (int)foo.GetValue(1);
var val10 = (int)foo.GetValue(10);

Console.WriteLine(val1);  // 输出100
Console.WriteLine(val10); // 输出200

为什么不能转为int[]?

int[]是CLR专门为零基一维数组定义的类型,和System.Int32[*](非零基一维数组)是完全独立的类型,两者不存在继承或直接转换关系,因此强制转换会抛出InvalidCastException。

额外说明

如果想要更贴近常规数组的操作语法,你可以自己封装简单的包装类,但底层本质还是通过Array的方法来操作非零基数组——这也是你提到的替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:27:08