Конвертировать цикл До До из VB в c #

1

Мне нужно преобразовать код VB в С#

Do Until MarkerPos = 0 Or i > UBound(Values)
    s = Replace(s, Token, Values(i),  , 1)
    i = i + 1;
    MarkerPos = Strings.InStr(s, Token);
Loop 

и я преобразовал его, чтобы сделать, пока

do
{
    s = Replace(s, Token, Values(i),  , 1)
    i = i + 1;
    MarkerPos = Strings.InStr(s, Token);
} while(MarkerPos = 0 || i > UBound(Values));

это правильно и есть ли что-то подобное, связанное с UBound в С#.???

  • 0
    Что вы пытаетесь сделать - я думаю, что вы, вероятно, можете сделать это лучше, если вы объясните цель
  • 1
    «До тех пор, пока ...» похож на некоторое время (! (...)). Кроме того, переключайте логику в начале, а не в конце цикла.
Показать ещё 1 комментарий
Теги:
c#-4.0
c#-3.0

6 ответов

2

Вы можете просто использовать values.Length чтобы возвращать количество элементов в массиве С#:

do
{
    s = Replace(s, Token, Values(i),  , 1)
    i = i + 1;
    MarkerPos = Strings.InStr(s, Token);
} 
while(MarkerPos = 0 || i > Values.Length -1);

(Вы также можете использовать .Count() для любого другого перечислимого типа)

РЕДАКТИРОВАТЬ:

Кроме того, я думаю, что ваше состояние может быть неправильным:

i < Values.Length -1

EDIT2:

и ваша логика, вероятно, должна быть И:

while(MarkerPos = 0 && i < Values.Length-1);
  • 0
    так несвязанно, чтобы просто считать правильно.
  • 0
    UBound = "верхняя граница", так что да
Показать ещё 2 комментария
1

если у вас есть массив из 10 элементов, Ubound вернет 10, а Length вернет 11.

вы можете использовать .GetUpperBound(0) или .Lenght-1

доказательство

 using System;
using Microsoft.VisualBasic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var ar = new string[11];

            Console.WriteLine(ar.GetUpperBound(0));
            Console.WriteLine(ar.Length);
            Console.WriteLine(Microsoft.VisualBasic.Information.UBound(ar));

            Console.ReadKey();
        }
    }
}

поэтому с помощью этого ответа

это то, что вам нужно, я думаю

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "123412341234";
            string Token = "2";
            var Values = new string[] {"a","b", "c" };
            int i = 0;
            int MarkerPos;

            do
            {
                s = ReplaceFirst(s, Token, Values[i]);
                MarkerPos = s.IndexOf(Token);
                i++;
            } while(MarkerPos != -1 && i <= Values.GetUpperBound(0));

            Console.WriteLine(s);

            Console.ReadKey();
        }

        static string ReplaceFirst(string text, string search, string replace)
        {
            int pos = text.IndexOf(search);
            if (pos < 0)
            {
                return text;
            }
            return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
        }
    }
}
0

Как упоминалось в комментарии 'the_lotus', цикл, который является наиболее естественным эквивалентом, представляет собой цикл while (! ":

while (!(MarkerPos == 0 || i > Values.GetUpperBound(0)))
{
    s = ...
    i = i + 1;
    MarkerPos = (s.IndexOf(Token) + 1);
}

Обратите внимание, что я оставил эквивалент "Заменить" - версия используемого вами метода VB "Заменить" не имеет прямого эквивалента, но вы, вероятно, можете проверить, будет ли метод регулярной строки "Заменить" адекватным или нет.

-1

Ты можешь написать:

do
{
    ...
} while(MarkerPos != 0 && i < Values.Length);
-1

Нет ubound в С#. Вы можете использовать что-то наподобие Values.Length, где Values - ваш строковый массив.

  • 0
    Нет строго верно. Вы можете использовать Ubound в пространстве имен VisualBasic, если добавите ссылку на него.
  • 0
    @MattWilko: отличная идея для самообманчивания кода!
Показать ещё 1 комментарий
-2

Я использовал эту страницу несколько раз, она может конвертировать наоборот: конвертировать vb.net в С# или С# в vb.net - developerfusion.com

Он также поддерживает python и ruby.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню