小议C#中的可空值类型
来源:互联网 发布:内网监控软件 编辑:程序博客网 时间:2024/05/19 19:33
通常一个值类型变量永远不可能为null,它总是包含值类型的值本身。但是在某些情况下会遇到一些问题如:在映射数据库中的一个可空值列时,使用Framework来处理数据库数据时变得相当困难;为了解决这一问题CLR中引入了“可空值类型(nullable value type)”
为理解它们是如何工作的,先看看CLR中的逻辑:
调用和输出:
C#中允许使用问号来申明初始化变量(等同于上面代码)如:
Int32? x = 5;
Int32? y = null;
总结一下C#对可空值类型对操作符的解释:
a.一元操作符如果操作数为null,结果为null;
b.二元操作符中任何一个为null,结果为null;
c.比较操作符如果两人个操作数都为null,两者相等;如果一个为null,两者不相等;如果两个数都不为null,对值进行比较;
注意:在操作值类型时会生成大量代码,代码类似对基类(Nullable)代码的调用;
当CLR对一个Nullable<T>实例进行装箱时,会检查它是否为null,如果为null,CLR不实际进行装箱操作,并会返回null值;
如果实例不为空,将从类型中取出值,并对其进行装箱如:
在应用可空值类型进行拆箱时,CLR会分配内存(这是一个极特殊的行为,在其它所有情况下,拆箱永远不会导致内存的分配),原因在于一个已装箱的值类型不能简单的拆箱为值类型的可空版本,在已装箱的值类型中并不包含Boolean hasValue字段,故在拆箱时CLR必须分配一个Nullable<T>对象,已初始化hasValue = true ,value = 值类型值。这会对应用程序性能造成一定影响。
通过可空值类型调用接口方法
- 小议C#中的可空值类型
- 小议C语言中的void类型
- C# 中的可空值类型 null
- 小议C和C++中的const类型限定符
- 小议C和C++中的const类型限定符
- 小议 C#中的“&”按位与运算符
- C# 迭代器 特点小议
- C#中的类型转换
- C#中的类型转换
- C#中的类型转换
- C#中的类型转换
- C#中的类型转换
- c#中的类型转换
- C#中的类型转换
- C#中的类型转换
- C#中的类型转换
- C# 中的类型转换
- C# 中的类型转换
- Java Annotation
- 从VC6到VC9移植代码问题总结
- ucweb.rar ucweb 6.7全部安装包HTTP下载
- 索尼爱立信W705评测:音乐+wifi无线上网
- 启程
- 小议C#中的可空值类型
- 装sql server2008时,performance这一项failed的问题
- ie6下hover改变背景颜色
- VMware6.5下修改linux(Redhat5.3)的分辨率
- 中国历史年代表
- 软件测试初探
- 网站访问分析对SEO的好处
- 读书养生论
- 用$包住的jQuery