zoukankan      html  css  js  c++  java
  • CLR笔记:18.可空值类型

    前言:System.Nullable<T>在FCL中的实现:
    System.Nullable<T>    where T:struct,所以Nullable<T>是一个值类型
    有两个只读属性HasValue和Value,以及GetValueOrDefault方法

    18.1 
        C#语法:Int32? 等价于 Nullable<Int32>,于是可以有:
        Int32? a = 5;
        Int32? b = null;

        允许类型转换:Int32 c = (Int32)a;
        允许 可空基元类型之间的类型转型:
            Double? d = 5;
            Double? e = b;
        允许对可空类型实例使用操作符。

    18.2
        ??,空接合操作符,用法Int32 c = a ?? b; 表示如果a不为null就返回a;否则返回b
        
    18.3
        对Nullable<T>装箱,要么返回null,要么返回已经装箱的T
        对已经装箱的T拆箱,或者为T,或者为Nullable<T>。对于后者,CLR要分配内存,以容纳Nullable<T>的hasValue和Value字段
        一个Nullable<T>对象,GetType()返回的类型是T,而不是Nullable<T>
        
        通过可空值类型调用接口方法:
                Int32? n = 5;
                Int32 result 
    = ((IComparable)n).CompareTo(5);
        这里,n是Nullable<T>类型,Nullable<Int32>并未实现IComparable<Int32>,但是C#中会先将隐式转换为Int32,因为Int32实现了IComparable<Int32>接口,所以以上代码可以编译。

  • 相关阅读:
    2018年12月29日 Oracle查询性能优化
    B
    A
    洛谷 P2447 [SDOI2010]外星千足虫
    洛谷 P5358 [SDOI2019]快速查询
    欠的题目
    ZJU-ICPC Summer 2020 Contest 8 B-Picnic
    洛谷 P3164 [CQOI2014]和谐矩阵
    K
    J
  • 原文地址:https://www.cnblogs.com/Jax/p/906261.html
Copyright © 2011-2022 走看看