• .NET 可空值类型


    Microsoft在CLR中引入了可空值类型(nullable value type)的概念。

    FCL中定义System.Nullable<T>类如下:

    [Serializable,StructLayout(LayoutKind.Sequential)]

    public struct Nullable<T> where T: struct {

             private Boolean hasValue=false;

             internal T value=default(T);

                      ………………(略)

    }

    一、             C#对可空值类型的支持

    1. Nullable<T>是值类型,实例仍然是”轻量级”的。即仍然可以在栈上,实例的大小就是原始值类型+Boolean字段大小。
    2. Int32?等价于Nullable<Int32>。
    3. 一元操作符(++,+,-,--,!,~) 操作数是null,结果就是null。
    4. 二元操作符(+,-,*,/,%,&,|,^,<<,>>)两个操作数中任何一个是null,结果就是null。

    Int32?   a=5;

    Int32?   b=null;

    //一元操作符

    a++//6;

    b=-b; //null;

    //二元操作符

    a=a+3;//a=9;

    b=b*3;//b=null;

    1. 相等性操作符(==,!=)两个操作数都是null,两者相等;一个操作数是null这两者不相等。两个操作数都不是null,就比较值来判断是否相等。
    2. 关系操作符(<,>,<=,>=)两个操作数任何一个是null,结果就是false。两个操作数都不是null,就比较值。

    二、C#的空结合操作符

    1. 空结合操作符(null-coalescing operator),即??操作符。
    2. 它要获取两个操作数,加入左边的操作数不为null,就返回这个操作数的值。如果左边的操作数为null,就返回右边的操作数的值。
    3. 利用空结合操作符,可以方便地变量的默认值。它既能拥有引用类型,也能用于可空值类型。
    4. ??在复合情形中更好用,如:

      String  s= DoThing1() ?? DoThing2() ?? ”NoThing!”;

    三、可空值的装箱拆箱调用GetType

    1. 当CLR对一个Nullable<T>实例进行装箱时,会检查它是否为null。

    a)         若是,CLR不实际装箱,并返回null值;

    b)         若不为null,CLR从可空类型中取出值,并对其进行装箱。

    1. CLR允许将一个已装箱的值类型T拆箱为一个T或者一个Nullable<T>。

    若已装箱的值类型的引用是null,且要拆箱为一个Nullable<T>,那么CLR会将Nullable<T>的值设为null。

    1. Int32?  x=5;

    Console.WriteLine(x.GetType());//输出System.Int32,而非System.Nullable<Int32>。

  • 相关阅读:
    蛋白质修饰|phosphors|mascot+X|
    miRNA|housekeeping|RNAi|siRNA|Oncomirs|miRBase|PMRD|TargetScan|miRDeep|miRNA target|seed regions|
    期刊|二次文摘数据库
    ISBN|方正|超星|The national academies press|OECD|RSC|Springer Link|Knovel|Encyclopedia Britannica
    CSA|EI
    材料和方法|详略得当
    撰写introduction|引用
    无聊期,就是最好的增值期
    swift中为什么要创造出可选型?
    win7连接无线网出现黄色感叹号怎么办?
  • 原文地址:https://www.cnblogs.com/shouwu/p/4106480.html
Copyright © 2020-2023  润新知