无限循环?看不出原因

时间:2010-01-28 01:19:26

标签: c# asp.net

我有一个接受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,
克里斯

4 个答案:

答案 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.ToInt32GetLength(0)是否抛出异常......

希望这有帮助, 最好的祝福, 汤姆。

答案 3 :(得分:0)

你的循环看起来很稳定,所以它必须不会因为其他原因而退出。你的数组可能包含一个会导致Convert.ToInt32挂起或抛出的值吗?