现在的位置: 首页 > 综合 > 正文

?可空类型 和 ??运算符

2012年04月26日 ⁄ 综合 ⁄ 共 1619字 ⁄ 字号 评论关闭

?运算符可以使值类型为null
例如: int ? x = null;

??运算符 (允许给可能等于null的表达式提供另一个值)
例如:int y = x ?? 1;
结果 y 为 1,即当x为null时 返回 1即运算符右侧数据,反之返回运算符左侧数据(如果第一个操作数不是null,该运算符就等于第一个操作数,否则该运算符就等于第二个操作数)

 

说明:有时让值类型为null是很有用的(尤其是处理数据库时),泛型使用 System.Nullable<T>类型提供了使值类型为空的一种方式。例如:

system.Nullable<int> nullableInt;

int? nullableInt 是system.Nullable<int> 的缩写,但可读性更高。

 

废话不多说,直接看代码,应该很容易懂,:)

int number = null;             //报错
int? number = null;            //编译正常,?代表可空类型,对所有值类型都可以使用

int? op = 5;
int result = op * 2;           //报错,因为op可能是null,不能用null * 值类型

应改为:

int? op = 5;
int result = (int)op * 2;
或者
int result = op.value * 2;     //(value属性是返回对象的值,我习惯性使用后者)

??运算符

int? op = null;
int result = op * 2 ?? 5;      //如果op*2返回null的话,那result就等于5,否则result就等于op*2

解释:
op是null,所以op * 2 也是null,但??运算符检测到这个情况,并把5赋值给了result
在这里要特别注意的是,在结果中放入int类型的变量result不需要显式转换.??运算符会自动处理这个转换.可以把??等式的结果放到int中去的.

以前使用的时候,都没做一下整理,刚好最近看书看到,就整理一下笔记:),

 

?运算符可以使值类型为null
例如: int ? x = null;

??运算符 (允许给可能等于null的表达式提供另一个值)
例如:int y = x ?? 1;
结果 y 为 1,即当x为null时 返回 1即运算符右侧数据,反之返回运算符左侧数据(如果第一个操作数不是null,该运算符就等于第一个操作数,否则该运算符就等于第二个操作数)

 

说明:有时让值类型为null是很有用的(尤其是处理数据库时),泛型使用 System.Nullable<T>类型提供了使值类型为空的一种方式。例如:

system.Nullable<int> nullableInt;

int? nullableInt 是system.Nullable<int> 的缩写,但可读性更高。

 

废话不多说,直接看代码,应该很容易懂,:)

int number = null;             //报错
int? number = null;            //编译正常,?代表可空类型,对所有值类型都可以使用

int? op = 5;
int result = op * 2;           //报错,因为op可能是null,不能用null * 值类型

应改为:

int? op = 5;
int result = (int)op * 2;
或者
int result = op.value * 2;     //(value属性是返回对象的值,我习惯性使用后者)

??运算符

int? op = null;
int result = op * 2 ?? 5;      //如果op*2返回null的话,那result就等于5,否则result就等于op*2

解释:
op是null,所以op * 2 也是null,但??运算符检测到这个情况,并把5赋值给了result
在这里要特别注意的是,在结果中放入int类型的变量result不需要显式转换.??运算符会自动处理这个转换.可以把??等式的结果放到int中去的.

以前使用的时候,都没做一下整理,刚好最近看书看到,就整理一下笔记:),

抱歉!评论已关闭.