gpt4 book ai didi

c# - AND 运算不能应用于可为空的 bool 值之间

转载 作者:太空狗 更新时间:2023-10-29 18:03:42 24 4
gpt4 key购买 nike

我在两个可为 null 的 bool 值 (bool?) 之间应用 AND 操作 (&&) 但它给我的错误是

Operator && cannot be applied to operands of type bool? and bool?

如何在包含两个可为 null 的 bool 值的语句中应用和操作?

另外,如果我有一个像

这样的对话结果
dialog.ShowDialog () == DialogResult.OK

我如何将它转换为可为空的 bool 值,因为我需要将 '&&' 运算符与 this 放在一个 if 条件中,而该条件的另一个操作数返回一个可为空的 bool 值?这是代码:

if (dialog.ShowDialog () == DialogResult.OK && CheckProjectPath(dialog.FileName, true))

此 if 条件中的第二个操作数是可为 null 的 bool 值。

最佳答案

How do i apply and operation in my statement that contains two nullable bools?

那么,你想要发生什么?这是非法的,因为如果第一个操作数为空,就会发生不好的事情。

什么是x && y对可为空的 bool 值 x 和 y 意味着什么?那么,可空 bool 值首先意味着什么?可为空的 bool 值意味着以下三种情况之一:

  • 条件肯定为真
  • 条件肯定为假
  • 条件是真还是假,但我们不知道是哪一个

那么 x && y 是什么意思?意思?它的意思是“仅当条件 x 为真时才计算 y”,但如果 x 可以为 null,则我们可能不知道 x 表示的条件是否为真

例如,假设我们有:

gotMoneyInZurich = SalesForNovemberWereMoreThanAMillionBucks() &&
TryToDepositAMillionBucksInASwissBankAccount();

如果 SalesForNovemberWereMoreThanAMillionBucks 为假,则不要尝试存钱,我们知道银行里没有钱。如果是真的,那就尝试存钱;如果失败了,那么我们在苏黎世就没有钱了;如果成功,我们就会这样做。

现在假设并非所有销售人员都报告了 11 月份的销售数据。我们知道 11 月的销售额是否超过 100 万美元吗?不,十一月已经过去;要么销售额超过 100 万美元,要么不超过 100 万美元,但现在我们不知道。正确答案不是“假”,正确答案不是“真”:正确答案是“我们不知道”:null。

那么如果第一个操作数返回的是null,该怎么办呢?我们不知道销售额是否超过一百万美元,那么尝试存钱或不尝试存钱是正确的做法吗?您是否应该根据缺失的信息采取行动?

编译器没有能力为你决定这个问题。如果你想在结果未知的情况下不存钱,那么你必须说:(SalesForNovemberWereMoreThanAMillionBucks() ?? false)表示“如果结果为空,则将其视为假”。

同样,如果你说:

if(x && y)
Frob();

并且x为真,y为空,那你该怎么办?你说的是“只有当 x 和 y 都为真时才 Frob。x 为真,我们不知道 y 是否为真”。那么你应该 Frob 还是不应该? 你不知道编译器也不知道。如果您想说的是“如果 x 为真且 y 为真或空则 Frob”,那么这样说:

if(x && (y ?? true))
Frob();

或者,“frob if x is true and y is true, but not if y is null”然后说:

if(x && (y ?? false))
Frob();

现在,如果您不使用 &&运算符用于短路评估然后不要使用&&运算符放在首位。使用 &运算符(operator);它总是评估双方,所以这里没有歧义。说x & y是完全合法的如果xy是可为空的 bool 值。你仍然不能在 if 中使用那个东西当然;这需要一个 bool 值,而不是一个可为空的 bool 值。但你可以说: bool ?结果 = x & y;其中 xy是可为空的 bool 值。

关于c# - AND 运算不能应用于可为空的 bool 值之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4349016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com