Подскажите как будет выглядеть эти два кусочка кода на 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 такому удобному поведению, насколько я знаю, нет.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости