参考MSDN,声明“您可以设置 Array 的下限,但 ArrayList 的下限始终为零”
如果我声明一个数组 a[10],则下限总是 a[0]。
这是那里指定的下限吗?如果是,我们如何设置数组的下限,因为数组的索引总是以 a[0] 开头。
或者链接中规定的下限是否有所不同?
注意:我知道指向.NET Framework 1.1内容的链接,但仍然想知道他们到底提到了什么。
您可以使用创建具有非零下限的数组Array.CreateInstance
。
请注意,除非您也将其设为多维,否则您将无法将其转换为Foo[]
(相关类型在哪里)。Foo
CLR 内部有两种类型的数组 -向量(基于零的单维)和数组(可以是多维的并且具有非零下限)。
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
。
就我个人而言,我会避免使用像瘟疫这样的非零下界数组。它们很慢,而且很难使用。
C# 和 VB.NET 中的下限始终为0
. Visual Basic 6.0 和更早版本允许变量下限。他们删除它是为了重写 .NET 的语言。
这是一篇详细介绍如何操作的文章:http: //msdn.microsoft.com/en-us/magazine/cc301755.aspx。寻找“创建具有非零下限的数组”