【问题标题】:Bool issue - changing value布尔问题 - 改变值
【发布时间】:2011-04-18 04:55:53
【问题描述】:

早上好。

我有以下方法用来尝试带回布尔值:

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:对不起,我很厚。

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

【问题讨论】:

  • 你能确认它的范围是一个变量(不是一个字段)。另外,您是否在其他任何地方使用showcatsubprodstatus,尤其是在 lambda、LINQ 表达式或匿名方法中?
  • 你好 Marc - 是的,它的作用域是一个变量,除了上面的 if 语句之外,showcatsubprodstatus 没有在其他任何地方使用。

标签: c# boolean boolean-logic


【解决方案1】:

这段代码返回一个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().

【讨论】:

  • 我爱你彼得,想要你的孩子:D
  • 我不得不使用 return r.FirstOrDefault().GetValueOrDefault();但是,由于我将 LNQ 用于与 Single/SingleorDefault 配合不佳的实体。
  • 不客气 :-) 在我工作的地方,我们将这些东西称为“健全性检查”,我们请附近的在职同事通读代码以发现此类问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2015-02-08
  • 2023-04-10
  • 2015-01-29
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多