我正在致力于将 VB6 应用程序转换为 C# 来使其现代化。我遇到的一项挑战是将某些 VB6 模式转换为其 C# 等效模式,尤其是在处理 API 和数据结构时。
Dim myArray(1 To 5) As Integer
Dim i As Integer
For i = LBound(myArray) To UBound(myArray)
myArray(i) = i * 10
Next i
Debug.Print myArray(3)
我尝试像这样转换它:
int[] myArray = new int[5];
for (int i = 0; i < myArray.Length; i++)
{
myArray[i] = i * 10;
}
Console.WriteLine(myArray[2]); // Equivalent to VB6's myArray(3)?
它有效,但有一些我不确定的事情:
在 VB6 中,数组从 1(或自定义下限)开始。在 C# 中,数组是从零开始的。在迁移更复杂的 VB6 逻辑时,如何正确考虑这一点?
当VB6的
LBound
和UBound
出现在较大的项目中时,我应该如何处理它们?是否有 C# 等效项或更好的迁移模式?
如果您确实希望索引从 1 到 5,那么只需使数组中的一个元素太大,然后忽略索引 0(零)处的槽即可:
int[] myArray = new int[6]; // one element bigger than necessary
for (int i = 1; i < myArray.Length; i++) // starts at 1 (one)
{
myArray[i] = i * 10;
}
Console.WriteLine(myArray[3]); // actually using 3 for the third element
当然,这仅适用于下限 1(一)。