布尔问题 - 改变价值

时间:2010-09-28 09:31:10

标签: c# boolean boolean-logic

早上好。

我使用以下方法尝试并恢复一个bool:

public static bool GetShowCatSubProdStatus(string memberid, string username)
    {
        MyEnts showcatsubprodstatus = new MyEnts.PDC_VDSOREntities35();

        var r = from p in showcatsubprodstatus.tblKeyAccountInfoes
                where p.MemberID == memberid && p.UserName == username
                select p.ShowCatSubProd;

        return r.Any();
    }

当我调用此方法并对其进行调试时,结果是正确的。但是,当我在页面加载中运行此方法时,虽然方法结果返回正确的结果,但当我单步执行时,布尔值会发生变化!

 bool showcatsubprodstatus = MyEnts.GetShowCatSubProdStatus(_memberid, _username);

        if (showcatsubprodstatus != true)
        {
            panCatSubProd.Visible = false;
        }

有人可以解释这里发生了什么,以及如何解决这个益智游戏?!

PS:对于厚厚的道歉。

编辑 - 对,将其缩小到变量。无论方法结果如何,它总是返回'true'?!?!

1 个答案:

答案 0 :(得分:0)

这段代码返回IEnumerable<bool>

var r = from p in showcatsubprodstatus.tblKeyAccountInfoes
        where p.MemberID == memberid && p.UserName == username
        select p.ShowCatSubProd;

通过调用.Any(),您可以询问IEnumerable中是否有任何项目。如果有你返回true;

这就是为什么你总能得到回报,因为它总会找到一些东西。

解决方案
要么你去调用.SingleOrDefault()返回唯一的元素(如果有的话)或返回该类型的默认值。

var r = from p in showcatsubprodstatus.tblKeyAccountInfoes
        where p.MemberID == memberid && p.UserName == username
        select p.ShowCatSubProd;
return r.SingleOrDefault(); //assuming p.ShowCatSubProd is a bool and not a Nullable<bool> else you need to adjust your return type or cast it to a boolean using .GetValueOrDefault().