gpt4 book ai didi

c# - 为什么 `bool?` 上没有解除短路运算符?

转载 作者:IT王子 更新时间:2023-10-29 04:50:30 24 4
gpt4 key购买 nike

为什么不 bool?支持解除&&|| ?他们本可以解除 truefalse本来可以间接添加的运营商解除了&&|| .

运算符 |&已经解除并实现正确的Three-valued logic .但当然它们不会像||那样短路和 && .

问题是为什么他们决定在创建规范时不取消这些运算符。所以“它是这样的,因为规范是这样说的”并不能回答“为什么?”。

提升时truefalse这样null既不是 true也不false :

public static bool operator true(bool? x) 
{
return x.HasValue && x.Value
}

public static bool operator false(bool? x)
{
return x.HasValue && !x.Value
}

这会导致 &&||表现就像他们的非短路同行。除了 false && anythingtrue || anything会短路(falsetrue 在这两个示例中不是编译时常量)。

这与 DBBool example on MSDN 非常相似.

我认为解除这些运算符不会带来令人惊讶或危险的行为。我错过了什么吗?

我已阅读 another SO question对此,但没有发现令人满意的答案。


Jeff Yates 的回答给出了解除 true 的一个很好的理由。/false operators 不是最优的,它不能解释为什么提升 &&||直接不好。由于运算符提升是特殊情况下的编译器魔法 Nullable<T>它不需要遵循普通类型的重载规则,因此能够提供 &&/||无需提升 true .

最佳答案

您的提议将为可空类型创建两种不同的使用模式。

考虑以下代码:

bool? a = null;

// This doesn't currently compile but would with lifted true/false operators.
if (a)
{
}

// Whereas this provides a consistent use of nullable types.
if (a ?? false)
{
}

为了保持可空类型使用的一致性,不解除 bool 上的 truefalse 运算符是有意义的。我不知道这是否是未完成的真正原因,但这对我来说很有意义。

关于c# - 为什么 `bool?` 上没有解除短路运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5204366/

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