【问题标题】:How to treat arrays in legacy VB6 code when migrating to .NET?迁移到 .NET 时如何处理旧版 VB6 代码中的数组?
【发布时间】:2019-08-23 10:51:11
【问题描述】:

我的任务是将旧的 VB6 代码迁移到 .NET 项目。一切顺利地将旧代码转换为现代 VB 方言,直到我遇到数组索引问题。旧的 VB 代码是假设所有数组都从索引 1 开始编写的,而 .NET 中的数组从 0 开始。

我应该如何处理?

  1. 重写所有 VB 代码以使位置假定从零开始的索引? (很多变化)

  2. 用零 (0) 填充数组的下限?

  3. 其他解决方案?

【问题讨论】:

  • @DBro:这适用于 VB.NET 吗?
  • @Midas 不,它没有。
  • 哦,该声明对 VB.NET 不再有效。我不知道...对不起虚假信息。在这种情况下,解决此问题的正确方法是将代码修复为使用基于 0 的索引。您有机会引入错误,但从技术上讲,保留代码原样也会使您面临潜在的错误。尤其是在您继续维护代码时。
  • 说实话,我从未见过 VB6 代码假定任何数组边界都是正确的。有lboundubound,应该使用这些。我会重写旧代码以在任何地方使用它,然后它会无缝移植。

标签: vb.net vb6 vb6-migration


【解决方案1】:

我建议选择选项 1 并花时间将代码转换为感觉合适的 .NET。

选项 2 也需要做很多工作(乍一看肯定很明显):

@GSerg:如果你尝试

Dim myArray As Int32()
ReDim myArray(10) 'creates an array with 11 elements (0..10), could be handy
For i As Int32 = LBound(myArray) To UBound(myArray) 'LBound is 0, UBound is 10
    Console.Out.WriteLine(i)
Next

你得到了错误的结果,需要在循环 11 个元素时调整你的逻辑。

如果你像这样创建数组也是一样的:

Dim myArray(10) As Int32

您必须将LBound 替换为1

Dim myArray As Int32()
ReDim myArray(10) 'creates an array with 11 elements (0..10), could be handy
For i As Int32 = 1 To UBound(myArray) 'LBound is 0, UBound is 10
    Console.Out.WriteLine(i)
Next

但无论如何你都必须调整每个数组,最好选择选项 1...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2010-09-16
    • 2014-04-18
    • 2015-06-14
    相关资源
    最近更新 更多