T[]
表示从零开始的 T 数组(array[0] 是它的第一个元素)
T[*]
表示非从零开始的 T 数组(array[0] 不是它的第一个元素,甚至可能超出范围)
The 你的问题的链接 http://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/e6f84f77-1a09-4dd9-a2af-eb3a54e9c7bc说明没有类型的数组T[*,*]
,因为所有多维数组T[,]
被视为具有未知下界的数组。
下面的代码片段显示了如何创建一个实例T[*]
。请注意,您不能将其投射到T[]
,因为它们是不同的类型。a[0]
这里会抛出OutOfRangeException,这个数组中第一个元素的索引是1(啊,帕斯卡的美好时光……).
Array a = Array.CreateInstance(typeof(String), new Int32[] { 1 }, new Int32[] { 1 });
Console.WriteLine(a.GetType()); // System.String[*]
更多示例代码 http://www.codeproject.com/Articles/34195/Non-Zero-Based-Arrays-and-Interface
Bonus.C# 语言规范说,“数组元素的索引范围从 0 到 Length - 1”。显然,该语言不提供对非从零开始的数组的内置支持,它只是您可以创建的自定义数据结构;尽管从某种意义上说,编译器碰巧有一个特殊的符号来表示其类型,并且 VS 在调试时使用标准数组可视化工具。
也可以看看:
如何在 C# 中创建索引从 1 开始的一维数组 https://stackoverflow.com/questions/5728409/how-to-create-a-1-dimensional-array-in-c-sharp-with-index-starting-at-1
C#:基于非零的数组不符合 CLS https://stackoverflow.com/questions/955732/c-nonzero-based-arrays-are-not-cls-compliant