博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中的?和??,null和Nullable
阅读量:6878 次
发布时间:2019-06-26

本文共 1424 字,大约阅读时间需要 4 分钟。

from :

https://www.cnblogs.com/appleyrx520/p/7018610.html

 
1.单问号(?)

1.1 单问号运算符可以表示:可为Null类型,2.0里面实现了Nullable数据类型

//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型。private int getNum = null;//B.如果修改为下面的写法就可以初始指为null,在特定情况下?等同于基础类型为Nullable。private int? getNum = null;private Nullable
getNumNull = null;

2.双问号(??)

?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

可以为 null 的类型可以包含值,或者可以是未定义的。?? 运算符定义当可以为 null 的类型分配给非可以为 null 的类型时返回的默认值。如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。如果使用强制转换,且当前还未定义可以为 null 值的类型,则会引发InvalidOperationException 异常。

//A.定义getNum为null,输出结果为0private int? getNum = null;Console.WriteLine(getNum ?? 0);//B.定义getNum为1,输出结果为1private int getNum = 1;Console.WriteLine(getNum ?? 0);

if语句中的time和null比较是否有效? 为什么?

from:

https://www.jianshu.com/p/cda351b8b770

static DateTime time;/* ... */if (time == null) { /* do something */ }

参考答案

有人可能会认为,由于DateTime变量永远不能为空(它自动初始化为0001年1月1日),因此当DateTime变量与null进行比较时,编译器会报错。但是,由于类型转换,编译器确实允许它,这可能会导致一些让你头疼的问题。

具体来说,==运算符会将等号两边的对象都转换成相同的类型,然后可以进行比较。这就是为什么像这样的写法会给你你期望的结果(而不是因为操作数是不同的类型而导致失败或表现异常):

double x = 5.0;int y = 5; Console.WriteLine(x == y); // 输出true

但是,这有时会导致意外行为,比如DateTime变量和null的比较。在这种情况下,DateTime变量和null文字都可以强制转换为Nullable <DateTime>。因此,比较这两个值是合法的,即使结果总是false。

 
posted on
2019-03-05 18:35 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/dusf/p/10478732.html

你可能感兴趣的文章
X皮书之shell热身
查看>>
js实现HTML标题栏中新消息提示效果
查看>>
【转】mac的lanchpad重复出现图标的解决方法
查看>>
STAR法则
查看>>
sprintf介绍
查看>>
java学习:weblogic下JNDI及JDBC连接测试(weblogic环境)
查看>>
python invoke super parent method
查看>>
[LeetCode] Binary Tree Maximum Path Sum
查看>>
获取HTML源码(只取文字,判断编码,过滤标签)
查看>>
我的架构经验系列文章 - 后端架构 - 设计层面
查看>>
vc生成静态库例子
查看>>
那些帮助你成为优秀前端工程师的讲座——《CSS篇》
查看>>
CheckBox为CheckBoxList实现全选或全取消选择
查看>>
Windbg中使用查找内存并设置访问断点
查看>>
数据库分区表的使用
查看>>
【SAS NOTES】_NULL_
查看>>
辨别delegate方法的好办法
查看>>
C#实现的几种委托
查看>>
Hypertable 0.9.7.1 发布,分布式数据库
查看>>
PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
查看>>