ArrayList和Array的区别

时间:2010-01-19 13:30:38

标签: .net arrays arraylist msdn

参考MSDN,声明“您可以设置数组的下限,但ArrayList的下限始终为零”

如果我声明一个数组a [10],则下限始终为[0]。

这是指定的下限吗?如果是,我们如何设置数组的下限,因为数组的索引始终以[0]开头。

或者链接中的下限是不同的?

注意:我知道链接指向 .NET Framework 1.1 的内容,但仍然很想知道他们究竟提到了什么。

2 个答案:

答案 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。寻找“创建具有非零下限的数组”