2016-02-08 4 views
1

У меня есть раздел в моем коде, который я запускаю, чтобы проверить, является ли элемент испанским или английским. Я использую эту логику из старого приложения vb.net.Ошибка указателя и длины подстроки

public int Spanish_Item() 
{ 
    int i = 0; 
    object j = 0; 
    int k = 0; 
    string ss = null; 
    string sp_item = null; 
    sp_item = TxtItem.Text.Trim(); 
    k = 0; 
    for (i = 1; i <= 15; i++) 
    { 
     ss = sp_item.Substring(i, 2); 
     if (ss == "XX") 
     { 
      k = 1; 
      i = 16; 
     } 
    } 
    return k; 
} 

Следующий код петля вокруг я получаю сообщение об ошибке:.

ex.Message «Индекс и длина должны ссылаться на место в пределах строки \ г \ nParameter имени: длина "строка

, пожалуйста, помогите !!!

+0

Похоже, что это вызвано жесткой длиной строки '15', которую вы передаете как параметр firts для '.Substring'. Вы должны положить туда реальную длину. –

+0

Как вы определяете испанский текст? – nAviD

ответ

5

Вы всегда переходите от 1 до 15 - если текст (обрезанный) TxtItem.Text короче, чем 15 символов, вы получите исключение.

Вы должны использовать длину-2 из sp_item как верхнюю границу, чтобы избежать ошибки. Кроме того, вместо i = 16 вы должны использовать break, чтобы остановить цикл for.

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

if (sp_item.IndexOf("XX")>=1) { 
    k=1; 
} 
+0

Оцените ответ buddy –

0

В C# первая позиция имеет индекс 0 не 1, как Vb

public int Spanish_Item() 
{ 
int i = 0; 
object j = 0; 
int k = 0; 
string ss = null; 
string sp_item = null; 
sp_item = TxtItem.Text.Trim(); 
k = 0; 
for (i = 0; i < sp_item.len-2; i++) 
{ 
ss = sp_item.Substring(i, 2); 
if (ss == "XX") 
{ 
k = 1; 
i = 15; 
} 
} 
return k; 
} 

вам могут использовать

if (sp_item.IndexOf("XX")>=0) { 
    k=1; 
} 
+0

Оцените помощника –

+0

@GMG Операция op указывает «из старого приложения VB.NET» - поскольку это вызов функции базовой библиотеки .NET, индекс также должен быть основан на 0. Однако, если оригинальное приложение было фактически VB6, VBA или аналогичным, тогда вы, конечно, были бы правы. – Lucero

Смежные вопросы