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

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

Initializing an array on arbitrary starting index in c#

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

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

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
// 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);

您可以使用Array.CreateInstance

请参阅.NET中的数组类型


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


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

然后可以按以下方式使用对象,并且它的行为将正确:

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

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


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

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


您可以编写自己的数组类


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


推荐阅读