T [,]和T [*,*]之间有什么区别?

dFl*_*lat 12 c# arrays multidimensional-array c#-4.0

我的Google-Jitsu让我失望了.问题在标题中...... T[,]和之间有什么区别T[*,*]?我正在寻找一个2,2/2部分答案:

  1. Layman(或超级建筑师)的简明英语解释与示例代码.

  2. 链接到这种区别的正式文件.

    额外奖励:指向定义此内容的C#4规范中的子部分和页码.(它不在第12节"阵列")

我在这里得到了这个概念.

Max*_*kin 15

T[] 表示从零开始的T 数组(array [0]是它的第一个元素)

T[*]表示一个非零的T 数组(array [0]不是它的第一个元素,甚至可以超出范围)

您的问题中链接说明没有类型数组T[*,*],因为所有多维数组T[,]都被视为具有未知下限的数组.

下面的代码片段显示了如何创建实例T[*].请注意,您无法将其强制转换为T[],因为它们是不同的类型.a[0]这里会抛出一个OutOfRangeException,这个数组中第一个元素的索引是1 (啊,好旧的Pascal天......).

Array a = Array.CreateInstance(typeof(String), new Int32[] { 1 }, new Int32[] { 1 });
Console.WriteLine(a.GetType());    // System.String[*]  
Run Code Online (Sandbox Code Playgroud)

更多示例代码

奖金.C#语言规范说,"数组元素的索引范围从0到长度 - 1".显然,该语言不提供对非零数组的内置支持,它只是一个可以创建的自定义数据结构; 虽然具体在某种意义上说编译器恰好有一个特殊的符号用于它的类型,VS在你调试时会使用标准的数组可视化器.

也可以看看:

如何在C#中创建一个索引从1开始的一维数组

C#:基于非零的数组不符合CLS