Я портирую существующее приложение VB 6 на .NET (C # 7).Функция VB 6, которая в настоящее время создает проблему, просто,
Private Function VB6Function(Name As String) As String
Dim I As Integer
Dim str_len As Integer
Dim search_str As String
Dim Search As String
Dim search_asc As Integer
For I = 1 To Len(Name)
search_str = Mid$(Name, I, 1)
search_asc = Asc(search_str)
Select Case search_asc
Case 200, 202, 203 To 214, 216, 217, 218, 219, 221 To 223, 225, 227, 228, 230
Search = Search & search_str
End Select
Next
GetSearchName = Search
End Function
Когда я преобразовал в быструю C # версию,
public static string CSharpMethod(string str)
{
if (string.IsNullOrWhiteSpace(str))
{
return str;
}
var validAsciiCharecters = new List<int> { 200, 202, 216, 217, 218, 219, 221, 222, 223, 225, 227, 228, 230 };
for (int i = 203; i <= 214; i++)
{
validAsciiCharecters.Add(i);
}
var newStr = "";
foreach (var ch in str)
{
if (validAsciiCharecters.Contains((int)ch))
{
newStr += ch.ToString();
}
}
return newStr;
}
VB6 input م سلطانة
и вывод مسلطن
.После копания внутри VB6 я нашел,
Когда я скопировал и вставил эти значения в блокнот, я нашел,
В C # (int)'Ê'
равно 202, а в VB 6 Asc("ت")
равно 202. Но проблема в том, что если я вызываю функцию C # с входом م سلطانة
, я получаю неправильный результат.