У меня есть функция, которая принимает roleID(as an int)
и сравнивает ее с многомерным массивом, чтобы увидеть, содержит ли этот массив этот roleID
. если это так, он устанавливает bool в true и breaks. если это не так, цикл никогда не выходит. Я надеюсь, что это что-то глупое, что я упускаю из виду, но теперь у меня было несколько разных людей.
Размер userRoles array
, который я тестирую прямо сейчас, составляет 3
. Я могу распечатать userRoles.GetLength(0)
, и он говорит 3, и это соответствует whats в базе данных.
здесь код:
public bool IsInRole(int roleID)
{
bool inRole = false;
int i = userRoles.GetLength(0);
for (int j = 0; j < i; j++)
{
if (Convert.ToInt32(userRoles[j, 0]) == roleID)
{
inRole = true;
break;
}
}
return inRole;
}
ТИА,
Крис
Вы уверены, что не ошибаетесь в симптоме, и что он действительно застревает в цикле? Код, который у вас там, не выглядит неправильным, моя первая мысль заключалась в том, что место, которое вы вызываете IsInRole(), неправильно обрабатывает "false".
Действительно ли j увеличивается? или он каким-то образом reset возвращается к 0?
Попробуйте это
public bool IsInRole(int roleID)
{
bool inRole = false;
int i = userRoles.GetLength(0);
for (int j = 0; j < i; j++)
{
int k = j;
if (Convert.ToInt32(userRoles[k, 0]) == roleID)
{
inRole = true;
break;
}
}
return inRole;
}
Глядя на MSDN GetLength свойство, чтобы процитировать:" Примером GetLength является GetLength (0), который возвращает количество элементов в первом измерении массива.
public bool IsInRole(int roleID) { bool inRole = false; try{ int i = userRoles.GetLength(0); for (int j = 0; j < i; j++) { if (Convert.ToInt32(userRoles[j, 0]) == roleID) { inRole = true; break; } } }catch(Exception up){ throw up; } return inRole; }
Я был бы склонен обернуть логику в try/catch, чтобы увидеть, что Convert.ToInt32
или GetLength(0)
выбрасывает исключение...
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Ваша петля выглядит сплошной, поэтому она не должна выходить по другой причине. Может ли ваш массив содержать значение, которое заставляет Convert.ToInt32 зависать или бросать?