Подскажите как будет выглядеть эти два кусочка кода на c#?
tmp_String = Trim(In_String)
tmp_Length = Len(tmp_String)
If tmp_Length <> 8 Then
tmp_Out = False
Else
tmp_Out = True
End If
tmp_Out = tmp_Out And IsNumeric(tmp_String)
If (tmp_Out = True) Then
N1 = Val(Left(tmp_String, 1))
N2 = Val(Mid(tmp_String, 2, 1))
N3 = Val(Mid(tmp_String, 3, 1))
N4 = Val(Mid(tmp_String, 4, 1))
Else
End if
If (K8 < 10) Then
tmp_Des = 10
tmp_Ed = Val(Right(Trim(Str(K8)), 1))
Else
tmp_Des = (Val(Left(Trim(Str(K8)), 1)) + 1) * 10
tmp_Ed = Val(Right(Trim(Str(K8)), 1))
End If
Вызвала трудности эта строка tmp_Out = tmp_Out And IsNumeric(tmp_String)
Для преобразования многих стандартных типов между собой можно использовать статический класс Convert с его многочисленными методами
Val(str)
>> Convert.ToInt32(str)
Аналогов Right и Left нет в стандартных средствах, поэтому придётся использовать метод извлечения подстроки.
Right(str,len)
>> str.Substring(str.Length -len, len)
Left(str,len)
>> str.Substring(0,len)
С обрезанием пробелов с двух сторон и взятием длины строки всё просто
Trim(str)
>> str.Trim()
Len(str)
>> str.Length()
С методом взятия подстроки нужно учитывать нюанс. В c# нумерация символов начинается с 0, а в VBA с 1
Mid(str,pos,len)
>> str.Substring(pos-1,len)
Аналогом IsNumeric можно считать Int32.TryParse, только он мощнее -- ещё и результат возвращает во втором выходном параметре. Но раз он нам не нужен, его можно проигнорировать с помощью _
IsNumeric(str)
>> Int32.TryParse(str, out _)
И так, вот как преобразуются, например, следующие выражения
(Val(Left(Trim(Str(K8)), 1)) + 1) * 10
>> (Convert.ToInt32(K8.ToString().Trim().SubString(0,1)) + 1) * 10
tmp_Out = tmp_Out And IsNumeric(tmp_String)
>>
tmp_Out &= Int32.TryParse(tmp_string, out _);
Объяснять про разницу в блоках if-else я думаю здесь не стоит. Также и переводить весь код на c# и печатать здесь полный листинг.
Ещё пару слов про And
. Полным аналогом flag1 = flag1 And flag2
будет
flag1 = flag1 & flag2
. Его можно сократить так, как я указал выше flag1 &= flag2
. Но правильным вариантом с учётом семантики вашего кода будет flag1 = flag1 && flag2
. Потому что, оператор &&
сэкономит машинное время и не станет вычислять правое выражение, если flag1 равен false. Аналогов в VBA такому удобному поведению, насколько я знаю, нет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
при написании модульного теста возникает ошибка "object не содержит определения для qwerty"
Подскажите в чем может быть проблема, вылетает ошибка при миграции на добавление связи между таблицами
У меня есть проверка такого рода GetName если находит подходящую строчку в тексте path то возвращает определённый текст