🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 如何:安全地将 bool? 强制转换为 bool(C# 编程指南) **bool?** 可以为 null 的类型可以包含三个不同的值:**true**、**false** 和 **null**。因此,**bool?** 类型不能用于条件语句,如 **if**、**for** 或 **while**。例如,以下代码会导致编译器错误。 ``` bool? b = null; if (b) // Error CS0266. { } ``` 这是不允许的,因为 **null** 在条件上下文中的含义并不清楚。若要在条件语句中使用 **bool?**,请首先检查其 [HasValue](https://msdn.microsoft.com/zh-cn/library/sksw8094.aspx) 属性以确保其值不是 **null**,然后将它强制转换为 **bool**。有关更多信息,请参见 [bool](https://msdn.microsoft.com/zh-cn/library/c8f5xwh7.aspx)。如果对使用 **null** 值的 **bool?** 执行强制转换,则在条件测试中将引发 [InvalidOperationException](https://msdn.microsoft.com/zh-cn/library/system.invalidoperationexception.aspx)。下面的示例演示了一种从 **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# 编程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [文字关键字(C# 参考)](https://msdn.microsoft.com/zh-cn/library/23954zh5.aspx) [可以为 null 的类型(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/1t3y8s4s.aspx) [?? 运算符(C# 参考)](https://msdn.microsoft.com/zh-cn/library/ms173224.aspx)