我的Google柔术让我失望。标题中有问题。T[,]
和T[*,*]
有什么区别?
我正在寻找2、2-1/2部分的答案:
奖励:指向定义此代码的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