我的Google柔术让我失望。标题中有问题。T[,]T[*,*]有什么区别?
我正在寻找2、2-1/2部分的答案:

  • Layman(或 super 建筑师)的纯英文解释,带有示例代码。
  • 链接到此区别的正式文档。
    奖励:指向定义此代码的C#4规范中的小节和页码。 (它不在第12节“数组”中)

  • 我得到了这个概念here

    最佳答案

    T[]表示从零开始的T数组(array [0]是其第一个元素)
    T[*]表示T的基于非零的数组(array [0]不是其第一个元素,甚至可能超出范围)

    link from your question解释说,没有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[*]
    

    More example code

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

    也可以看看:

    How to create a 1-Dimensional Array in C# with index starting at 1

    C#: Nonzero-based arrays are not CLS-compliant

    10-07 16:29
    查看更多