循环返回尽管休息

时间:2015-04-14 22:39:52

标签: c# razor

我正在运行循环,循环访问数据库中的条目。每次循环运行时,我都会将用户的答案与数据库中的值进行比较。表行名为answer2,answer3 ...等所以我连接一个字符串:(“answer”+(i))并使用带有database.queryValue(string)的字符串将数据库中的值放入变量中。 (在本例中为变量cAltAnsX)

最终循环返回一个空值。我希望我的循环在它再次运行之前终止。我尝试将查询的值加载到对象中,然后将其与DBNull.Value进行比较,然后尝试使用break退出循环;但是我仍在比较2个字符串。即uAns.ToLower()== cAns.ToLower()。  我的代码返回错误,因为它无法将Null值转换为字符串。 一旦查询加载空值(并且在脚本可以尝试将其转换为字符串之前),我想退出这些循环。

我尝试过使用break并返回结束字符串,但我仍然遇到同样的问题。

if (!Request.QueryString["uAnswer"].IsEmpty())
{
uAns = Request.QueryString["uAnswer"];

if (uAns.ToLower() == cAns.ToLower())
        {
            anBool = true;
        }
        else                //Should cycle through all answers in alternativeAnswers table
        {
            for (var i = 0; i < 30; i++) 

                {


                                if (uAns.ToLower() == cAltAnsX.ToLower())
                                    {
                                        anBool = true;
                                    }
                                    else
                                    {
                                        altAnsXCom = altAnsXCom+1;
                                        string x = altAnsXCom.ToString();
                                        AltCommandTemp = string.Concat(altAns1Com, x, altAns2Com, sQTerm);
                                        cAltAnsX = db.QueryValue(AltCommandTemp);
                                        objcAA = db.Query(AltCommandTemp);

                                       if (objcAA == DBNull.Value)   {break;}
                                        if (cAltAnsX == null) {break;}
                                    }

                    }
            if (anBool != true)
                {
            anBool = false;
                }
        }

3 个答案:

答案 0 :(得分:0)

如果这是在函数内部,您确定不想return而不是break吗?


休息只会超出你当前的范围。如果你有一个嵌套的循环/开关案例,只会突破最里面的部分。

我建议将你的逻辑分解为一个单独的函数或lambda,你可以简单地将return缩短。


此外,看起来您可能正在进行字符串连接以查询数据库,这是一种全面的错误形式,而不是基于参数的查询。

答案 1 :(得分:0)

你说“程序仍然崩溃,因为它仍然将Null值与脚本顶部的字符串进行比较。”我认为这意味着这是因为cAltAnsX为null并且您正在尝试调用cAltAnsX.ToLower()?

在代码中,只有在objcAA为空时才会中断。我想你还需要检查cAltAnsX是否为空。

if (uAns.ToLower() == cAltAnsX.ToLower())
{
    anBool = true;
}
else  // this reloads the query before subsequent comparison
{
    ...
    cAltAnsX = db.QueryValue(AltCommandTemp);
    objcAA = db.Query(AltCommandTemp);
    if (objcAA == DBNull.Value)   {break;}
    if (cAltAnsX == null)   {break;}
}

答案 2 :(得分:0)

所以我找到了答案。部分问题是我需要使用

(cAltAnsX.Equals(null))

(DBNull.Value.Equals(objcAA))

而不是

(string == null) or (object == DBNull.Value)

如果有人可以就这两种策略之间的差异教育我,我将不胜感激。 然后我通过将这些条件放在if循环中来解决问题。 即。

 if (!DBNull.Value.Equals(objcAA))
{
   //do stuff
}