可空类型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;

 
原文地址:https://www.cnblogs.com/newcoder/p/5007278.html