我已经将大约4000-5000行的VBA代码转换为C#。唯一的问题是:
在VBA中,您可以创建一个类型的数组,并设置开始索引。例如:
//This creates an Array with an index 5 to index 100.
doubleArray(5 To 100) As Double
在C#中不可能创建一个从0以外的索引开始的数组。(请参见下面的链接。)我认为这将留下以下两种可能性:
1. 创建一个从0到100的doubleArray
我可以按照以下方式创建一个doubleArray:
Double[] doubleArray = new Double[100];
这种方法的优点是我可以使用VBA代码中描述的索引号来设置索引。这意味着以下内容:VBA代码假定数组从[5]到[100]存在,而我也能够在C#中将数字5设置为100。
但是,在我看来,这相当混乱,因为您始终会创建具有未使用内存的数组(在此示例中为索引[0]到索引[4])。因此,我考虑了第二个选项。
2. 从0到((topindex-bottomindex)+1)创建doubleArray
我可以按以下方式创建doubleArray:
Double[] doubleArray = new Double[((topindex - bottomindex) + 1)];
在我看来,这应该是“最干净”的解决问题的方法,避免不必要的内存使用。在VBA中,数组使用[5]到[100],这使得长度为96。对于这个选项也是一样的(((100-5)+1)=96)。
然而,最大的缺点是这也需要忽略已经编写的所有代码。如果任何函数调用doubleArray [97],它应该是doubleArray [((97-5)+1)]。
我的问题是如何处理这种情况?
如果其他人看到另一个选项/可能性,欢迎提出建议。
更多背景信息,请参考我之前的问题的后续: Vba Type-Statement conversion to C#