是否可以在c#中初始化一个数组,例如,subindex 1?
我正在使用Office互操作,并且每个属性都是一个从1开始的对象数组(我假设它最初是在VB.NET中编写的),你不能修改它,你必须为它设置整个数组接受这些变化。
作为一种解决方法,我正在克隆原始数组,修改那个数组,并在完成后将其设置为整体。
但是,我想知道是否可以创建一个新的非零数组
答案 0 :(得分:18)
可以按要求查看下面的代码。
// 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 :(得分:7)
您可以使用Array.CreateInstance
。
答案 2 :(得分:1)
不简单。但你当然可以写自己的课程。它将一个数组作为私有变量,用户会认为他的数组从1开始,但实际上它从零开始,你从他的所有数组访问中减去1。
答案 3 :(得分:0)
您可以编写自己的数组类
答案 4 :(得分:0)
我不认为是否可以修改数组的起始索引。
我会使用泛型创建自己的数组并在里面处理它。
答案 5 :(得分:0)
保持名为'offset'的const int值为1,并始终将其添加到代码中的下标中。
答案 6 :(得分:0)
我认为你不能在C#中创建非零的数组,但你可以轻松地在内置的数据结构中编写自己的包装类。这个包装类将保存数组类型的私有实例你需要;不允许重载[]索引操作符,但是您可以向类添加索引器以使其行为类似于可索引数组,请参阅here。您编写的索引函数可以向传入的所有索引添加(或减去)1。
然后你可以按如下方式使用你的对象,它会表现正常:
myArrayObject[1]; //would return the zeroth element.
答案 7 :(得分:-1)
在VB6中,您可以将数组更改为以0或1开头,因此我认为VBScript也可以这样做。对于C#,它是不可能的,但你可以简单地在第一个[0]中添加NULL值并在[1]处开始实际值。当然,这有点危险......