我有一个接受roleID(as an int)
的函数,并将其与多维数组进行比较,以查看该数组是否包含roleID
。如果确实如此,它会将bool设置为true并中断。如果没有,循环永远不会退出。我希望这是一个愚蠢的东西,我忽略了,但我有几个不同的人现在看。
我正在测试的userRoles array
的大小是3
。我可以打印userRoles.GetLength(0)
,它会显示3,并且匹配数据库中的最新内容。
这是代码:
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;
}
TIA,
克里斯
答案 0 :(得分:3)
你确定你没有误诊症状,而且它确实陷入了循环中吗?你在那里的代码看起来不错,我首先想到的是你正在调用IsInRole()的地方没有正确处理'false'返回。
答案 1 :(得分:1)
j实际上正在递增吗?还是以某种方式将其重置为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;
}
答案 2 :(得分:0)
查看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)
是否抛出异常......
希望这有帮助, 最好的祝福, 汤姆。
答案 3 :(得分:0)
你的循环看起来很稳定,所以它必须不会因为其他原因而退出。你的数组可能包含一个会导致Convert.ToInt32挂起或抛出的值吗?