可为空值的“值类型”以及其用法
2011-09-26 21:42
232 查看
.NET中的null代表一个引用类型的变量不引用任何的对象,但是在某些场合,值类型的变量也可能是“空”的。比如数据库里面,表中的字段常常会出现NULL值。
数据库的字段的NULL值会带来一点小麻烦,例如,假设我们使用ADO.NET从数据库中提取记录填充到某个DataTable对象里,数据库表中包含一个int类型的字段(假设其名为IntColumn),其值可能为NULL,现在我们需要依据取回的这一字段的值来设置一个数据对象相应属性值(假设此数据对象类型为MyDataClass,它有一个类型为int,名为IntProperty对应属性),由于int类型不允许为null则必须这样写代码:
很显然,当一个表中有大量的这样可能为NULL的字段的时候,上述代码的编写就会成为一个索然无味的机械劳动,引发这一问题的原因之一就是值类型的变量不能取"空"值。
当然,这个问题C#的设计师早就想到了,在C#里面提供了这样的代码形式
有了可空类型,我们就可以这样定义MyDataClass类了;
可空类型的使用方法
1>当混用可空类型与值类型变量的时候,要注意课空类型变量不能直接赋值给相应的值类型变量,例如以下代码是错误的:
改为以下代码:
但是上面的代码斌不是完美的,如果opl的值为null,则上述代码在运行的时候会引发InvalidOperationException异常,为此我们必须要判断以下可空类型的变量是否有值
2>当一个可空变量为NULL的时候,我们可以给它一个默认值,C#的代码可以这么写:
有此上面的完美的代码应该这么写:
数据库的字段的NULL值会带来一点小麻烦,例如,假设我们使用ADO.NET从数据库中提取记录填充到某个DataTable对象里,数据库表中包含一个int类型的字段(假设其名为IntColumn),其值可能为NULL,现在我们需要依据取回的这一字段的值来设置一个数据对象相应属性值(假设此数据对象类型为MyDataClass,它有一个类型为int,名为IntProperty对应属性),由于int类型不允许为null则必须这样写代码:
DataTable dt=.....//从数据库中提取数据,填充到DataTable中 DataRow dr=dr.Row[0]; MyDataClass dataObject=new MyDataClass();//创建数据对象 if(dr.IsNull("intColumn"))//判断此字段是否为NULL dataObject.IntProperty=0;//直接赋值为0(或者装换为另外一个特殊的值) else dataObject.IntProperty=Convert.ToInt32(dr["intColumn"]);
很显然,当一个表中有大量的这样可能为NULL的字段的时候,上述代码的编写就会成为一个索然无味的机械劳动,引发这一问题的原因之一就是值类型的变量不能取"空"值。
当然,这个问题C#的设计师早就想到了,在C#里面提供了这样的代码形式
int ? n=null;
有了可空类型,我们就可以这样定义MyDataClass类了;
class MyDataCalss { public int ? IntProperty{get;set;} }
可空类型的使用方法
1>当混用可空类型与值类型变量的时候,要注意课空类型变量不能直接赋值给相应的值类型变量,例如以下代码是错误的:
int ? opl=5; int result=opl*2;//错误,int?类型的值不能传给int变量
改为以下代码:
int ? opl=5; int result=opl.Value*2;
但是上面的代码斌不是完美的,如果opl的值为null,则上述代码在运行的时候会引发InvalidOperationException异常,为此我们必须要判断以下可空类型的变量是否有值
2>当一个可空变量为NULL的时候,我们可以给它一个默认值,C#的代码可以这么写:
opl ?? 0//当opl为空是给它赋值为0
有此上面的完美的代码应该这么写:
int ? opl=null; int result=(opl ?? 0)*2;
相关文章推荐
- sqlserver数据类型char和nchar,varchar和nvarchar,text和ntext的用法以及区别
- python基本数据类型list,tuple,set,dict用法以及遍历方法
- Window.ActiveXObject的用法 以及如何判断浏览器的类型
- sqlserver数据类型char和nchar,varchar和nvarchar,text和ntext的用法以及区别
- 数组用法以及引用类型和值类型
- C语言中指针的定义和在不同环境下作为形参的用法以及指针类型的强转
- 【转】python中使用 C 类型的数组以及ctypes 的用法
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
- 使用交换函数交换两个变量的值(以int类型为例)的错误用法以及正确用法
- 后缀数组详解以及其用法,常用解决的问题类型
- python 序列类型以及list(列表) 和 tuple(元组)详解 以及range的用法
- v-model在其它元素以及类型上的用法
- 检测空值,以及会不会出现mapping类型不一致的问题
- javascript中的真假值、数据类型判断以及+的特殊用法
- sqlserver数据类型char和nchar,varchar和nvarchar,text和ntext的用法以及区别?
- python中使用 C 类型的数组以及ctypes 的用法
- 常见的指针数据类型以及const用法详解
- Swift中的可选类型(Optional)以及?和!的用法详解
- C++ double转string类型以及MFC控件简单用法
- freemarker对空值的处理以及基本数据类型