如何:安全地将 bool? 强制转换为 bool(C# 编程指南)

bool? 可以为 null 的类型可以包含三个不同的值:truefalsenull。因此,bool? 类型不能用于条件语句,如 ifforwhile。例如,以下代码会导致编译器错误。

bool? b = null;
if (b) // Error CS0266.
{
}

这是不允许的,因为 null 在条件上下文中的含义并不清楚。若要在条件语句中使用 bool?,请首先检查其 HasValue 属性以确保其值不是 null,然后将它强制转换为 bool。有关更多信息,请参见 bool。如果对使用 null 值的 bool? 执行强制转换,则在条件测试中将引发 InvalidOperationException。下面的示例演示了一种从 bool? 安全地强制转换为 bool 的方法:

bool? test = null;
// Other code that may or may not
// give a value to test.
if(!test.HasValue) //check for a value
{
    // Assume that IsInitialized
    // returns either true or false.
    test = IsInitialized();
}
if((bool)test) //now this cast is safe
{
   // Do something.
}

请参阅

C# 编程指南

文字关键字(C# 参考)

可以为 null 的类型(C# 编程指南)

?? 运算符(C# 参考)