Mikixx Ответов: 2

Преобразование кода из VB.NET до С#


можете ли вы преобразовать этот код в vb.net в c#.net-что?
спасибо
Public t1MenuScorrevole As String
Public n1MenuScorrevole As Integer
Public ndx1MenuScorrevole As Single
Public ScrittaInseritaMenuScorrevole As String
Public ScrittaMenuScorrevole As String

If Len(t1MenuScorrevole) = 0 Then t1MenuScorrevole = Space$(18)
     n1MenuScorrevole = Len(ScrittaInseritaMenuScorrevole)
     ndx1MenuScorrevole = (ndx1MenuScorrevole Mod n1MenuScorrevole) + 1
     Mid$(t1MenuScorrevole, 1, 18) = Mid$(t1MenuScorrevole, 2, 18)
     Mid$(t1MenuScorrevole, 18, 1) = Mid$(ScrittaInseritaMenuScorrevole, ndx1MenuScorrevole, 1)
     ScrittaMenuScorrevole = Mid(t1MenuScorrevole, 1, 18)


Что я уже пробовал:

сайт конверсии, но не работает правильно
спасибо

BillWoodruff

Покажите некоторые примеры значений переменных и пример правильного результата.

Что мешает вам написать это на C#: в этом коде нет ничего сложного.

В C# нет эквивалента оператору двойного назначения 'Mid в VB.NET-да.

Начните с составления списка того, что происходит в каждой строке кода, добавьте этот список к вашему вопросу.

Bryian Tan

есть ли у вас пример того, что "не работает правильно"?

2 Ответов

Рейтинг:
2

OriginalGriff

Причина, по которой онлайн-конвертеры не могут изменить это с VB.NET для C# это то, что этот код не является VB.NET - это (в лучшем случае) код VB6, который предшествовал VB.NET. И хотя это будет работать, это не очень хорошая идея, чтобы использовать даже в VB.NET код, не говоря уже о C#!
C# не имеет никакого эквивалентного Mid$ присваивания: строки в C# (и VB.NET) являются неизменяемыми, так что это не то, что вы действительно можете сделать, и это означает, что нет кода, который вы можете заменить этим, который гарантированно заменит все его тонкости.
И это отвратительно:

Dim inp As String = "ABCDEFGH"
Mid$(inp, 3, 4) = "1234567890"
даст вам AB1234GH, потому что "символьные индексы", используемые Mid$ как основанные на них, в отличие от всех других индексов в приложении .NET.

Проблема на самом деле заключается в том, что строки VB6 не являются неизменяемыми - поэтому использование Mid$ в приложении .NET может иметь нежелательные побочные эффекты, поскольку не все ссылки на строку могут обновляться, что было бы довольно неприятно.

Вместо того чтобы искать прямой перевод, я бы предложил вам посмотреть, для чего предназначен этот код, и воссоздать всю функцию в C# - в результате вы получите гораздо более удобное приложение.


Mikixx

проблема вот в чем я стараюсь подстроить почти середину
но я не могу это преобразовать
Середина$(t1MenuScorrevole, 1, 18) = средний$(t1MenuScorrevole, 2, 18)
Середина$(t1MenuScorrevole, 18, 1) = средний$(ScrittaInseritaMenuScorrevole, ndx1MenuScorrevole, 1)

OriginalGriff

Прочтите, что я сказал: прямой замены нет, вам гораздо лучше перепроектировать весь метод, чтобы сделать ту же самую работу, вместо того чтобы пытаться заставить плохой код делать большую часть того, что делал старый код.

Mikixx

мне очень жаль
я не знаю, как создать новый код для c# этот код предназначен для scroollable строки на дисплее
спасибо

BillWoodruff

Интересно, что это за код ... с переменными, установленными в "разумные" значения ... будет компилироваться и запускаться в Visual Studio VB.NET проект ... учитывая использование Mid$

OriginalGriff

И немного тревожно, учитывая, что эти две струны должны быть такими разными. Вот почему я бы воссоздал процедуру вместо того, чтобы пытаться написать замену Mid$ - я бы беспокоился о побочных эффектах на другие ссылки на исходную строку; должны ли они быть обновлены или нет? если да, то как вы их находите? Мерзкая штука ... и склонен к каким-то ужасным жукам, появляющимся на линии! :смеяться:

BillWoodruff

Привет Грифф, к твоему сведению: я поддержал твой пост :) и я содрогаюсь, думая о том, что я делал еще в палеолите, используя VB !

Я полностью согласен с вами в том, что первое, что здесь нужно понять оператору,-это то, что делает этот код, а затем повторно реализовать его в C#. Я надеюсь, что подсказки, которые я вложил в свой ответ, будут полезны, но все же, надеюсь, мотивируют ОП ... учить.

Mikixx

в vb.net этот код выполняется правильно но теперь я использую c#
я могу скомпилировать новый код, если он свободен
спасибо

BillWoodruff

Что вы сделали до сих пор, чтобы обучить себя программированию на C# ? Если вы отредактируете свой оригинальный пост здесь и четко опишете функциональность, которую вы хотите, я буду рад вам помочь.

Mikixx

да я сначала учусь сам использую vb и vb.net эта функция предназначена для scrool text in display который я отправляю с serialport in a display

Рейтинг:
0

BillWoodruff

Вот несколько идей для вашего перевода кода:

0. в C# создать строку с #n повторяющимися символами:

string spaces18 = new string(' ', 18);
1. эквивалент C# для VB.NET -средняя функция, которая заменяет части строки:
public void MidReplace(ref string targetstring, int nstart, int nreplace, string sourcestring)
{
    StringBuilder sb = new StringBuilder();

    sb.Append(targetstring.Substring(0, nstart));
    sb.Append(sourcestring.Substring(0, nreplace));
    sb.Append(targetstring.Substring(nstart + nreplace));

    targetstring = sb.ToString();
}
2. Функция VB 'Mid, которая возвращает часть строки, может быть сопоставлен непосредственно с методом подстроки C#'s'.

Иметь в виду:

1. Метод 'MidReplace показаны здесь, и C# подстроки используется метод #0 индексация: в основе функции VB середины используйте #1 индексация на основе.

2. чтобы сделать метод MidReplace надежным, вы должны добавить проверку диапазона.

3. Обратите внимание на использование 'ref для параметра, переданного в 'MidReplace.

А теперь: веселитесь !


Graeme_Grant

5 б :)

BillWoodruff

Спасибо, Грэм

Maciej Los

Согласитесь с Биллом, А5!

BillWoodruff

Спасибо, Мацей