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

我正在使用 Office 互操作,每个属性都是一个从 1 开始的对象数组(我假设它最初是在 VB.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 开始,但实际上它从 0 开始,并且您从他的所有数组访问中减去 1。

您可以编写自己的数组类

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top