参考MSDN,声明“您可以设置数组的下限,但ArrayList的下限始终为零”
如果我声明一个数组a [10],则下限始终为[0]。
这是指定的下限吗?如果是,我们如何设置数组的下限,因为数组的索引始终以[0]开头。
或者链接中的下限是不同的?
注意:我知道链接指向 .NET Framework 1.1 的内容,但仍然很想知道他们究竟提到了什么。
答案 0 :(得分:4)
您可以使用Array.CreateInstance
创建一个非零下限的数组。
请注意,除非您将其设置为多维,否则您将无法将其转换为Foo[]
(其中Foo
是相关类型)。 CLR中有两种类型的数组 - 向量(基于零的,单维)和数组(可以是多维的,并且具有非零下限)
C#中的T[]
始终对应于向量,而T[][]
对应于数组。所以你可以这样做:
int[][] rectangle = (int[][]) Array.CreateInstance(typeof(int),
new int[]{2, 2}, // lengths
new int[]{-1, -1}); // lower bounds
但这会失败:
int[] rectangle = (int[]) Array.CreateInstance(typeof(int),
new int[]{2}, // length
new int[]{-1}); // lower bound
同样,您无法将其投放到IEnumerable<int>
或IList<int>
- 尽管您可以使用IEnumerable
对其进行迭代。
就个人而言,我会避免使用像瘟疫这样的非零下界数组。他们工作缓慢,痛苦。
答案 1 :(得分:3)
C#和VB.NET的下限始终为0
。 Visual Basic 6.0及更早版本允许变量下限。他们删除它以重写.NET的语言。
以下是一篇详细介绍如何操作的文章:http://msdn.microsoft.com/en-us/magazine/cc301755.aspx。寻找“创建具有非零下限的数组”