zoukankan      html  css  js  c++  java
  • 可空类型Nullable

    Nullable类型:

    值类型变量默认为0,不可空,为了使它可空,出现了Nullable类型,类型前面加?  变为引用类型

    值类型是没有null值的,比如int,DateTime,它们都有默认值。举个例子,在访问数据库时,会存在一定的问题,Person类有字段Age(int类型),Birthday(DateTime),如果没有给它们赋值,我们期望的是向数据库插入时,应该是null,而不是0和0001-01-01;同样从数据库取值时也是如此,如果数据值为null,我们也希望Age和Birthday的值能反应出来,如果不使用int?和DateTime?就做不到。

    Nullable 类型(结构体)是System.Nullable<T> 这种结构体的实例,一个Nullable类型可以代表他的值类型的正确的范围,同时添加了为“空”的值。

    例如,一个Nullable<Int32>,声明了“Int 32的可空类型”,可以被赋值“-2147483648 to 2147483647”,或者可以被赋值 空。Nullable<bool> 可以被赋值“true,false,null”.对数值类型和bool类型 ,当处理数据库或者一些数据类型,不能对某些字段赋值的时候,可以赋为“null”尤为重要。例如 Boolean类型变量,在数据库可以存储"true false"或者未定义。

    int? 相当于 Nullable<int>

    Guid? 相当于 Nullable<Guid>

    class NullableExample
    {
        static void Main()
        {
            int? num = null;
    
            // Is the HasValue property true?
            if (num.HasValue)
            {
                System.Console.WriteLine("num = " + num.Value);
            }
            else
            {
                System.Console.WriteLine("num = Null");
            }
    
            // y is set to zero
            int y = num.GetValueOrDefault();
    
            // num.Value throws an InvalidOperationException if num.HasValue is false
            try
            {
                y = num.Value;
            }
            catch (System.InvalidOperationException e)
            {
                System.Console.WriteLine(e.Message);
            }
        }
    }

    OutPut:
    num = Null
    Nullable object must have a value.

    特性:
    1:可为NUll,不能创建一个可空类型基于一个引用类型
    2:语法T?是 Nullable<T>的简写,T是一个值类型,两种形式可以相互转换。
    3:
    for example int? x = 10; 
    or double? d = 4.108.
    A nullable type can also be assigned the value null: int? x = null.
    4:用
    •  HasValue and Value 只读属性,if(x.HasValue) j = x.Value;

    • HasValue-->true/false(default:false)

      Value(property)-->value/System.InvalidOperationException  is thrown

    6:==  & != 可用于NUllable,  if(x!=null)y=x;

    7:??指定现在值为NULL的defaultValue      int? x= null; int y = x??-1

    8:不允许嵌套的Nullable   :

    Nullable<NUllable<int>>  n;

     
  • 相关阅读:
    青蛙学Linux—Zabbix部署之构建LNMP环境
    青蛙学Linux—Zabbix运维监控平台
    青蛙学Linux—ProxySQL实现MySQL读写分离
    青蛙学Linux—ProxySQL配置系统
    青蛙学Linux—MySQL中间件ProxySQL
    青蛙学Linux—MySQL主从复制
    青蛙学Linux—MySQL备份工具XtraBackup
    PicGo+图床,编写本地markdown
    mfix输出自定义数据
    OpenFoam+CFDEM+Liggghts安装耦合
  • 原文地址:https://www.cnblogs.com/newcoder/p/5007278.html
Copyright © 2011-2022 走看看