可为空值的“值类型”以及其用法

.NET中的null代表一个引用类型的变量不引用任何的对象,但是在某些场合,值类型的变量也可能是“空”的。比如数据库里面,表中的字段常常会出现NULL值。
数据库的字段的NULL值会带来一点小麻烦,例如,假设我们使用ADO.NET从数据库中提取记录填充到某个DataTable对象里,数据库表中包含一个int类型的字段(假设其名为IntColumn),其值可能为NULL,现在我们需要依据取回的这一字段的值来设置一个数据对象相应属性值(假设此数据对象类型为MyDataClass,它有一个类型为int,名为IntProperty对应属性),由于int类型不允许为null则必须这样写代码:

1 DataTable dt=.....//从数据库中提取数据,填充到DataTable中
2 DataRow dr=dr.Row[0];
3 MyDataClass dataObject=new MyDataClass();//创建数据对象
4 if(dr.IsNull("intColumn"))//判断此字段是否为NULL
5 dataObject.IntProperty=0;//直接赋值为0(或者装换为另外一个特殊的值)
6 else dataObject.IntProperty=Convert.ToInt32(dr["intColumn"]);

很显然,当一个表中有大量的这样可能为NULL的字段的时候,上述代码的编写就会成为一个索然无味的机械劳动,引发这一问题的原因之一就是值类型的变量不能取"空"值。
当然,这个问题C#的设计师早就想到了,在C#里面提供了这样的代码形式

int ? n=null;

有了可空类型,我们就可以这样定义MyDataClass类了;

1 class MyDataCalss
2 {
3 public int ? IntProperty{get;set;}
4 }

可空类型的使用方法
  
1>当混用可空类型与值类型变量的时候,要注意课空类型变量不能直接赋值给相应的值类型变量,例如以下代码是错误的:

1 int ? opl=5;
2 int result=opl*2;//错误,int?类型的值不能传给int变量

  改为以下代码:

1 int ? opl=5;
2 int result=opl.Value*2;

  但是上面的代码斌不是完美的,如果opl的值为null,则上述代码在运行的时候会引发InvalidOperationException异常,为此我们必须要判断以下可空类型的变量是否有值
  2>当一个可空变量为NULL的时候,我们可以给它一个默认值,C#的代码可以这么写:

1 opl ?? 0//当opl为空是给它赋值为0

  有此上面的完美的代码应该这么写:

1 int ? opl=null;
2 int result=(opl ?? 0)*2;









转载于:https://www.cnblogs.com/zhangxiaobing/archive/2011/09/26/2192303.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值