gpt4 book ai didi

c# - 为什么可为空的 bool 值不允许 if(nullable) 但允许 if(nullable == true)?

转载 作者:IT王子 更新时间:2023-10-29 04:02:15 25 4
gpt4 key购买 nike

此代码编译:

private static void Main(string[] args)
{
bool? fred = true;

if (fred == true)
Console.WriteLine("fred is true");
else if (fred == false)
Console.WriteLine("fred is false");
else Console.WriteLine("fred is null");
}

这段代码不能编译。

private static void Main(string[] args)
{
bool? fred = true;

if (fred)
Console.WriteLine("fred is true");
else if (!fred)
Console.WriteLine("fred is false");
else Console.WriteLine("fred is null");
}

我认为 if(booleanExpression == true) 应该是冗余的。为什么不是这种情况?

最佳答案

Nullable<bool> 没有隐式转换至 bool . 一个从bool的隐式转换至 Nullable<bool>这就是第一个版本中每个 bool 常量发生的情况(用语言术语来说)。 bool operator==(Nullable<bool>, Nullable<bool>然后应用运算符。 (这与其他提升运算符不太一样 - 结果只是 bool ,而不是 Nullable<bool> 。)

换句话说,表达式 'fred == false' 的类型是 bool ,而表达式 'fred' 的类型为 Nullable<bool>因此您不能将它用作“if”表达式。

编辑:为了回答评论,从来没有从 Nullable<T> 进行隐式转换至 T并且有充分的理由 - 隐式转换不应该抛出异常,除非你想要 null隐式转换为 default(T)没有其他事情可以做。

此外,如果双向隐式转换,像“nullable + nonNullable”这样的表达式会非常困惑(对于支持 + 的类型,如 int )。 +(T?, T?) 和 +(T, T) 都可用,具体取决于转换的操作数 - 但结果可能大不相同!

我 100% 支持只对 Nullable<T> 进行显式转换的决定至 T .

关于c# - 为什么可为空的 bool 值不允许 if(nullable) 但允许 if(nullable == true)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/447408/

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