在c#中的任意起始索引上初始化数组

是否可以在c#中初始化一个数组,例如,subindex 1?

我正在使用Office互操作,并且每个属性都是一个从1开始的对象数组(我假设它最初是在VB.NET中编写的),你不能修改它,你必须设置整个数组才能接受它变化。

作为一种解决方法,我正在克隆原始数组,修改那个数组,并在完成后将其设置为整体。

但是,我想知道是否有可能创建一个新的非零基数组

您可以使用Array.CreateInstance

请参阅.NET中的数组类型

您可以按要求查看下面的代码。

 // Construct an array containing ints that has a length of 10 and a lower bound of 1 Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 }); // insert 1 into position 1 lowerBoundArray.SetValue(1, 1); //insert 2 into position 2 lowerBoundArray.SetValue(2, 2); // IndexOutOfRangeException the lower bound of the array // is 1 and we are attempting to write into 0 lowerBoundArray.SetValue(1, 0); 

不简单。 但你当然可以写自己的课程。 它将一个数组作为私有变量,用户会认为他的数组从1开始,但实际上它从零开始,你从他的所有数组访问中减去1。

您可以编写自己的数组类

我不认为是否可以修改数组的起始索引。

我会使用generics创建自己的数组并在里面处理它。

保持名为’offset’的const int值为1,并始终将其添加到代码中的下标中。

我认为你不能在C#中创建非零的数组,但你可以在内置的数据结构中轻松编写自己的包装类。这个包装类将保存你需要的数组类型的私有实例; 不允许重载[]索引操作符,但是您可以向类添加索引器以使其行为类似于可索引数组,请参见此处 。 您编写的索引函数然后可以向传入的所有索引添加(或减去)1。

然后,您可以按如下方式使用您的对象,它会表现正常:

 myArrayObject[1]; //would return the zeroth element. 

在VB6中,您可以将数组更改为以0或1开头,因此我认为VBScript也可以这样做。 对于C#,它是不可能的,但你可以简单地在第一个[0]中添加NULL值并在[1]处开始实际值。 当然,这有点危险……