zoukankan      html  css  js  c++  java
  • 关于可空值类型

    有这样一个场景,在数据库中经常有一些字段是可以为空的,把数据库中的字段映射成c#中的一个对象会出现一些问题,比如:一个人的出生日期是一个值类型DateTime,在数据库中是可以为空的一个字段,当你使用ado.net把它映射成对象的时候,对DateTime属性赋值就变的比较困难了,如果数据库中这个值是NULL,映射的对象要想准确的反映数据库中的字段,那就必须给对象的DateTime赋值为null,但是值类型不能赋值为null,所以才有了可空值类型来解决这一问题。

     

    引用类型是可以赋值为null的。但值类型是不能赋值为null的。如果在值类型之后加一个?,那么“普通的值类型”,就变成了一个“可空值类型”,可空值类型不仅可以赋值一个普通的值,也可以赋值一个null。不能在引用类型后加 ,只能在值类型之后加  

     

    Code

     

             int? n;

                n = null;

                if (n == null)

                {

                    Console.WriteLine("现在整形可以被赋值为空");

                }

                Console.ReadKey();

    打印结果为:现在整形可以被赋值为空

     

    我们很奇怪为什么int ?类型就可以赋值为空呢,它到底是一个什么类型,我们通过反编译工具可以看出原来它是Nullable类型,但是Nullable类型也是一个值类型,为什么可以赋值给null呢?

    我们看到了反编译工具里的这句话:

    没错,原来微软把=给重写了,所以我们可以给它赋值,上面的n=null其实就是执行的 return value.Value的值,而 int ? n=9就是调用的implicit operator T?这个方法 ,再调用Nullable的构造函数

      

    这样value字段里就有值了,我们可以通过Value属性来访问这个值,如果可空值类型被赋值为null,就不能调用上面的构造方法,通过Value取值时就会报错,HasValue就是用来标记我们赋的值是空值还是一个结构类型的值,如果是结构类型的值,就会调用构造方法,

    HasValue就会被赋值为true

  • 相关阅读:
    忍者x3,SDCMS2.0发布模块,使用说明
    多一度评论 发布模块,如何使用?
    端口站群,泛站,批量,垃圾站,还是x3的营销插件,如何选择?
    忍者X3,今天又更新了很多内容
    准备做淘宝客相关的生成工具。
    怎么样可以方便的获取到网站的ico图标呢?
    ECShop网店系统273发布模块 如何使用?
    站群还是非常火爆的,你看这力度。
    如果对文章的质量进一步把关,发布之前的批量过一遍
    有人做过FLASH验证码识别吗?
  • 原文地址:https://www.cnblogs.com/dongqinglove/p/3556611.html
Copyright © 2011-2022 走看看