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

时间:2020-03-05 18:58:48  来源:igfitidea点击:

是否可以在c中初始化例如子索引1中的数组?

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

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

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

解决方案

回答

我们可以编写自己的数组类

回答

在VB6中,我们可以将数组更改为以0或者1开头,因此我认为VBScript可以执行相同的操作。对于C#,这是不可能的,但是我们可以简单地在第一个[0]中添加NULL值,并在[1]处开始实际值。当然,这有点危险...

回答

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

回答

我们可以使用Array.CreateInstance。

请参阅.NET中的数组类型

回答

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

我将使用泛型创建自己的数组并在内部进行处理。

回答

只需保留名为" offset"的const int值为1,并始终将其添加到代码中的下标即可。

回答

我认为我们无法在C#中创建基于非零的数组,但是我们可以轻松地围绕内置的数据结构编写自己的包装器类。不允许重载[]索引运算符,但是我们可以向类添加索引器以使其表现得像可索引数组一样,请参见此处。然后,我们编写的索引函数可以对传入的所有索引加(或者减)1.

然后,我们可以按以下方式使用对象,并且它可以正确运行:

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

回答

可以按照要求进行操作,请参见下面的代码。

// 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);