详解System.Nullable<值类型>

.net framework 2.0包含了一个泛型类型定义,它满足了两种情况的要求:可以将一个值类型的实例赋值为null,并且可以判断该实例的值是否为null,该泛型类型就是System.Nullable<T>,其中T被限制为值类型。从System.Nullable<T>构造而来的类型称为可控值类型(nullable value type).

System.Nullable<T>有一个属性value,当一个可空值类型的实例的值不为null时,可以通过这个属性获得该类型实例的值。所以我们可以写出类似下面这样的代码:

System.Nullable<int> myNullableInteger=null

myNullableInteger=1;

if(myNullableInteger!=null)

{

  Console.WriteLine(myNullableInteger.Value);

}

C#语言提供了一种简化语法来声明从System.Nullable<T>构造的类型。该

语法允许将:

System.Nullable<int> myNullableInteger;

简写成:

int? myNullableInteger;

 

编译器不允许将一个可空值类型的值直接赋值给普通的值类型,例如下面的代码是不能通过编译的:

int? myNullabelInteger=null;

int myInteger=myNullabelInteger;

因为可空值类型的值可以是null,而null不可以赋给普通值类型。

 

虽然编译器允许下面这样的代码:

int? myNullableInteger=null;

int myInteger=myNullableInteger.Value;

但是第二行代码的运行将会抛出异常,因为当从System.NUllable<T> 构造的类型没有赋予一个有效的T类型的值时,任何对其System.Nullable<T>.Value属性的访问都是无效操作,上面这个例子就是事先没有赋值。

 

 

将一个可空值类型的值赋给普通类型的方法是:先用System.Nullable<T>.Hasvalue属性判断这个可空值类型是否被赋过一个类型为T的有效值:

int? myNullableInteger=null;

if(myNullableInteger.HasValue)

{

  int myInteger=myNullableInteger.Value;

}

 

 

另外一种方法是使用下面的语法:

int? myNullableInteger=null;

int myInteger=myNullableInteger??-1;

如果后者(myNullableInteger)被赋予有效的整型值,那么普通整型myInteger将被赋予可空整型值myNullableInteger的值,否则myInteger将被赋值为-1;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值