2

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

如果我声明一个数组 a[10],则下限总是 a[0]。

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

或者链接中规定的下限是否有所不同?

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

4

2 回答 2

4

您可以使用创建具有非零下限的数组Array.CreateInstance

请注意,除非您也将其设为多维,否则您将无法将其转换为Foo[](相关类型在哪里)。FooCLR 内部有两种类型的数组 -向量(基于零的单维)和数组(可以是多维的并且具有非零下限)。

C# 中的 AT[]始终对应于一个向量,而 aT[][]对应于一个数组。所以你可以这样做:

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>or IList<int>- 尽管您可以很好地对其进行迭代IEnumerable

就我个人而言,我会避免使用像瘟疫这样的非零下界数组。它们很慢,而且很难使用。

于 2010-01-19T13:50:47.347 回答
3

C# 和 VB.NET 中的下限始终为0. Visual Basic 6.0 和更早版本允许变量下限。他们删除它是为了重写 .NET 的语言。

这是一篇详细介绍如何操作的文章:http: //msdn.microsoft.com/en-us/magazine/cc301755.aspx。寻找“创建具有非零下限的数组”

于 2010-01-19T13:32:34.393 回答