C#2.0可空类型

今天才接触到 可空类型, 这个类型的值非常有用,可以表示其基础值类型正常范围内的值,再加上一个null, 如以前数据库中某个字段是支持空类型的,但是DataSet不支持空.就必须得加个值来表示空,现在有了可空类型就不需要了,空就是空。

 

定义: 可空类型是 System.Nullable 结构的实例。可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。例如,Nullable<Int32>,读作可空的 Int 32” ,可以被赋值为 -2147483648 2147483647 之间的任意值,也可以被赋值为 null 值。Nullable<bool> 可以被赋值为 true false,或 null。在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true false,或者,该字段也可以未定义。

 

特性:

l          可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。

l          为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; double? d = 4.108;

l          语法 T? System.Nullable<T> 的简写,此处的 T 为值类型。这两种形式可以互换。

l          使用 HasValue Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;

n          如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False

n          如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException

n          可空类型变量的默认值将 HasValue 设置为 false。未定义 Value

l          使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;

l          不允许使用嵌套的可空类型。将不编译下面一行:Nullable<Nullable<int>> n;

 

使用:

比如        int? i1 = null;

            int i2 = 2;

            i1 = 1;

            i1 = i2;

但不能 i2 = i1 - 1;    应该是使用  i2 = i1 ?? -1 ; i1null i1被当成0 ,也就是说结果为-1

int? e = null;

int? f = null;

//efnull,结果为-1, enull 其余g= f,e不会null g=e;

int g = e ?? f ?? -1;

 

另外 Nullable<int> num = null 等于 int?num = null

任何值类型都可用作可空类型的基础

int? i = 10;

double? d1 = 3.14;

bool? flag = null;

char? letter = 'a';

int?[] arr = new int?[10];

 

可空类型可强制转换为常规类型

但直接i2 = i1;报错

i2 = (int)i1;i2 = i1.Valuel 都可以,但要是null一样抛出异常

 

在做比较时,可空类型如果当前为空,那么除null以外的比较结果始终为false

bool? 可空类型可以包含三个不同的值:truefalse null。它们本身不能用于条件语句,如 iffor while

可空布尔值类似于 SQL 中使用的布尔变量类型。为了确保 & | 运算符产生的结果与 SQL 的三值布尔类型一致,提供了以下预定义的运算符:

bool? operator &(bool? x, bool? y)

bool? operator |(bool? x, bool? y)

下表中列出了这些运算符的结果:

X

y

x&y

x|y

True

True

True

True

True

False

False

True

True

Null

Null

True

False

True

False

True

False

False

False

False

False

Null

False

Null

Null

True

Null

True

Null

False

False

Null

Null

Null

Null

Null

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值