• 【C#】关于bool?和bool


    1、bool?和bool (VS2012版本下的)

          bool关键字是System.Boolean的别名(实际上bool是基本值类型,Boolean是对象;bool是C#中的,Boolean是.net Framework中的。其实它们俩是一样啦,没什么差别的),用于生成变量存储布尔值true、false。bool数据类型在内存中占1个字节。但bool? 可以为null的类型(下面扩展中有解释的),包含三个不同的值:true、false和null。bool变量的默认值为 false,而bool?变量的默认值为 null。 所以 bool? 类型不能用在条件语句(如if、for或while)中,否则会导致编译器的错误。
    例如:

    bool? b=null;
    if(b) 
    {
    }

          上诉代码是不允许的,因为null 在条件上下文中的含义并不清楚,若要在条件语句中使用 bool?,请首先确定其HasValue不是null,然后再将它强制转换为bool;如果对使用null 值的 bool? 执行强制转换,那么将会引发 InvalidOperationException异常
          因此,微软给出下面的方法可以  将bool?安全的强制转换为bool (这个才是重点呢)

    bool? test = null;
    ...
    if(!test.HasValue) //选择一个值
    {
    test = IsInitialized();
    }
    if((bool)test)
    {
    ...
    }

    注意: 在C++中,bool 类型的值可以转换为 int 类型的值,也就是说:false 等效于零值,而 true 等效于非零值。但在C#中,不存在bool类型与其他类型之间的相互转换。
    2、扩展:C#中使用可以为null的类型
    (1)可以为null的类型有两种声明方式:
             System.Nullable<T> variable      或      T? variable
             T 是可以为null 的类型的基础类型,T 可以是包括 struct 在内的任何值类型,但不能是引用类型。其实 T? 意思就是 T范围值+ 上可为空的值。
    (2)类型示例
             任何值类型都可用作可以为 null 的类型的基础,如:

    int? i = 10;
    double? d1 = 3.14;
    bool? flag = null;
    char? letter = 'a';
    int?[] arr = new int?[10];

      ######    bool, string, int 这些叫做值类型(value type);Boolean, String, Int32这些叫做引用类型(Reference Type)。值类型是存在内存的 stack(堆栈)中的,而引用类型存在 heap(堆)中。
    (3)成员
           可以为 null 的类型的每个实例都具有两个公共的只读属性:
           HasValue
               HasValue 属于 bool 类型。 当变量包含非 null 值时,它被设置为 true。
           Value
               Value 的类型与基础类型相同。 如果 HasValue 为 true,则说明 Value 包含有意义的值。 如果 HasValue 为 false,则访问 Value 将引发 InvalidOperationException异常。

     --后记:上课时老师提到的,然后我在CSDN和其他网站查了下,总结下来了,@_@

  • 相关阅读:
    Ubuntu20.04和22.04离线安装PostgreSQL14
    HK32F030MF4P6的Linux GCC工具链开发环境
    OCR 03: PaddleOCR
    SpringBoot+MyBatis Plus对Map中Date格式转换的处理
    AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码
    Ubuntu22.04 安装配置VNC Server
    Ubuntu22.04 安装配置流水账
    沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置
    沁恒CH32V003(一): CH32V003F4P6开发板上手报告和Win10环境配置
    GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告
  • 原文地址:https://www.cnblogs.com/kefira/p/bool.html
Copyright © 2020-2023  润新知