С помощью gmStudio, инструмента анализа и реорганизации VB6/ASP/COM от Great Migrations, вы можете управлять этими вещами, изменив «поверхностные формы», используемые «машиной строк», поскольку он интерпретирует код, созданный его компилятора и авторов в нужной записи. Например, здесь поверхность по умолчанию формирует для Len:
<subcode id="Len">
<vbn role="function" narg="1" code="Strings.Len(%1d)"/>
<csh role="function" narg="1" code="VBNET.Strings.Len(%1d)"/>
</subcode>
Для настройки C# код, излучаемые для работы Len вы можете применить переопределение и создать пользовательскую конфигурацию перевода:
<subcode id="Len">
<csh role="function" narg="1" code="%1d.Length"/>
</subcode>
Заполнитель % 1d указывает, где исходный параметр должен быть отправлен в поток кода C#.
Это упрощение очень простого случая, но это идея.
ПРИМЕЧАНИЕ: форма поверхности по умолчанию ближе к исходной семантике VB6. Например, string.Length выдает исключение в C#, если аргумент имеет значение null, но VBNET.Strings.Len() возвращает 0. Это говорит о том, что если вы никогда не ожидаете, что пустая строка будет выбрасывать исключение при возникновении события, нет - по крайней мере, у вас есть выбор.
бы не 'PaymentsArray.GetUpperBound (0)' быть современным эквивалентом 'UBound (PaymentsArray)'? – Gabe