Eclipse开发平台 Eclipse集成开发环境 Java技术参考 J2EE企业应用项目 J2EE开发框架整合应用
Visual Studio 2008 技术 Visual Studio 2008集成环境 LINQ SQL Server 2008数据库 Silverlight WCF WPF WWF
平台综合 开发平台技术动态 跨平台开发 软件信息技术与商业 国外媒体技术资讯
程讯网下载 精品代码 — J2EE应用下载 精品代码 — ASP.NET应用 常用J2EE开发框架 流行ASP.NET开发框架

搜索
Google
 
最新文章
对“职业生涯及规划”的一些想法与建议
 
Visual Studio 10将会怎样?
 
三十怎么了? 心态最重要!
 
访问Microsoft格式文件的Jakarta-POI API库的.NET版本
 
dashCommerce 3.X如何安装Microsoft SQL Server 2005 Express Edition的高级服务功能
 
.net 2.0运行时提示以下错误:authentication mode=Windows 解决方法如下
 
在浏览器中发贴子时实现自动添加贴子签名档的BHO对象设计
 
C#下用Browser Helper Object对象实现拦截IE浏览器的各项消息的IE插件
 
Build a Managed BHO and Plug into the Browser
 
在C#中用WM_COPYDATA消息来实现进程间通信的详细编码
 
BHO 浏览器辅助对象关联原理、编写流程
 
Oracle8i的卸载
 
Oracle9i图形工具OEM的简介
 
详细介绍整个Oracle9i软件的安装过程
 
C# 面向对象设计模式纵横谈 - 18、Iterator迭代器(行为型模式)
 
 
C# 2.0语言规范讲义 - 可空类型 - C#初级编程、.NET技术门外汉、基础性概念通俗理解
 
内容摘要 -
在与数据库交互时,支持所有类型(包括值类型)的可空值是很重要的,而一直以来通用编程语言很少 或没有提供这方面的支持。在没有直接语言支持的情况下,虽然也存在许多用于处理空值和值类型的方 法,但都存在缺点。例如,一种方法是使用“特殊”值(例如将 1 用于整数)指示空值,但是这种方 法只有在能够确定未使用的值的情况下有效。另一种方法是在单独的字段或变量中维护布尔空值指示 符,但是这种方法不是很适合参数和返回值。第三种方法是使用一组用户定义的可空类型,但是这仅适 用于属于闭集的类型集合。C# 的可空类型 (nullable type) 通过为所有值类型的可空形式提供完整和集成 的支持,解决了这个由来已久的问题。

全文 -

C# 2.0语言规范讲义 - 可空类型


在与数据库交互时,支持所有类型(包括值类型)的可空值是很重要的,而一直以来通用编程语言很少
或没有提供这方面的支持。在没有直接语言支持的情况下,虽然也存在许多用于处理空值和值类型的方
法,但都存在缺点。例如,一种方法是使用“特殊”值(例如将 1 用于整数)指示空值,但是这种方
法只有在能够确定未使用的值的情况下有效。另一种方法是在单独的字段或变量中维护布尔空值指示
符,但是这种方法不是很适合参数和返回值。第三种方法是使用一组用户定义的可空类型,但是这仅适
用于属于闭集的类型集合。C# 的可空类型 (nullable type) 通过为所有值类型的可空形式提供完整和集成
的支持,解决了这个由来已久的问题。
可空类型是使用  类型修饰符来构造的。例如,int 是预定义类型 int 的可空形式。可空类型的基础
类型必须是非可空的值类型。
可空类型是一个组合了基础类型的值和布尔空值指示符的结构。可空类型的实例具有两个公共只读属
性:bool 类型的 HasValue 和可空类型的基础类型的 Value。HasValue 对所有非空实例都为 true,
对空实例为 false。当 HasValue 为 true 时,Value 属性返回所包含的值。当 HasValue 为 false 时,尝
试访问 Value 属性将引发异常。
可从任何非可空值类型隐式转换到该类型的可空形式。此外,还可从 null 文本隐式转换到任何可空类
型。在下面的示例中
int x = 123;
int y = null;
if (x.HasValue) Console.WriteLine(x.Value);
if (y.HasValue) Console.WriteLine(y.Value);
int 值 123 和 null 文本被隐式转换为可空类型 int。该示例针对 x 输出 123,但是第二个
Console.WriteLine 未执行,因为 y.HasValue 为 false。

可空转换 (Nullable conversion) 和提升转换 (lifted conversion) 允许对非可空值类型进行操作的预定义转
换和用户定义转换也能够用于这些类型的可空形式。同样,提升运算符 (lifted operator) 允许用于非可空
值类型的预定义运算符和用户定义运算符也能够用于这些类型的可空形式。
对于从非可空值类型 S 到非可空值类型 T 的每个预定义转换,将自动存在从 S 到 T 的预定义可空转
换。这种可空转换是基础转换的一种空传播 (null propagating) 形式:它将空的源值直接转换为空的目标
值,但是对其他值则执行基础非空转换。此外还进一步提供了从 S 到 T 和从 S 到 T 的可空转换,后
一种转换作为在源值为空时将引发异常的显式转换。
下面是一些可空转换示例。
int i = 123;
 
int x = i;
double y = x;
int z = (int)y;
int j = (int)z;
 
// int --> int
// int --> double
// double --> int
// int --> int
 
当源和目标类型均为非可空值类型时,用户定义的转换运算符将具有提升形式。源和目标类型将添加一
个  修饰符以创建提升形式。与预定义的可空转换类似,提升转换运算符也可传播空值。
当操作数类型和结果类型全都为非可空值类型时,非比较运算符具有提升形式。对于非比较运算符,每
个操作数类型和结果类型将添加一个  修饰符以创建提升形式。例如,接受两个 int 操作数并返回一
个 int 的预定义 + 运算符的提升形式是接受两个 int 操作数并返回一个 int 的运算符。与提升转
换类似,提升非比较运算符也进行空传播:如果提升运算符的任一操作数为空,则结果为空值。
下面的示例使用 + 提升运算符将两个 int 值相加:
int x = GetNullableInt();
int y = GetNullableInt();
int z = x + y;
对 z 的赋值实际上等价于:
int z = x.HasValue &a

9 7 3 1 2 4 8 :

 
相关内容
查找更多 ◇ C#初级编程、.NET技术门外汉、基础性概念通俗理解