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

C# 在c中初始化任意起始索引上的数组#,c#,arrays,interop,ms-office,initialization,C#,Arrays,Interop,Ms Office,Initialization,在c#中是否可以初始化子索引1中的数组 我正在使用Office interop,每个属性都是一个从1开始的对象数组(我假设它最初是在VB.NET中编程的),您不能修改它,您必须为它设置整个数组以接受更改 作为一种解决方法,我将克隆原始阵列,修改该阵列,并在完成后将其作为一个整体进行设置 但是,我想知道是否有可能创建一个新的非零基数组您可以在VB6中编写自己的数组类您可以将数组更改为以0或1开头,因此我认为VBScript也可以这样做。对于C#,这是不可能的,但是您可以简单地在第一个[0]中添加N

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

我正在使用Office interop,每个属性都是一个从1开始的对象数组(我假设它最初是在VB.NET中编程的),您不能修改它,您必须为它设置整个数组以接受更改

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


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

您可以在VB6中编写自己的数组类

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

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

您可以使用


请参见

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


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

只需将名为“offset”的常量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);

vb.net数组也从0开始。但是如果您不想创建它们(新数组(3到5)或类似的内容),可以创建它们。属性要求数组从1开始,所以这不起作用。是的,您可以自己做任何事情。。。问题是c#syntaxI是否可以实现,我真的很想知道它在语法上是否可行,但这是一个很好的解决方案。请在答案中包含代码,而不是链接到明天可能不存在的文档。+1:一段有用的代码相当于上千篇关于代码的无法阅读的文章链接。是否可以将其键入int[]而不是数组?