当前位置:网站首页>深入理解C# 可空类型
深入理解C# 可空类型
2022-07-29 10:56:00 【weixin_44326283】
值类型变量为什么不能为空
null在内存中是以全0存在的。值类型变量的值存储在内存中就会自动在值后面添加一个全0的值用来限制值类型变量的值范围。引用类型没有这种机制,所以引用类型可以为空,而值类型不能为空。但因为数据库中的所有类型都能为空,所以希望值类型能为空。
C#1中给值类型为空的方式
| 名称 | 具体操作 |
| 魔值 | 将具体的一个数作为空值,例如DateTime中的空值传给数据库中为0001-01-01 00:00:00 |
| 引用类型包装 | 进行装箱和拆箱 |
| 额外的不二标志 | 将值类型用另一个值类型进行空值判断 |
Nullable<T>
属性1:HasValue,判断是否有值
属性2:Value,真实的值
方法GetValueOrDefault,如果有真实的值就返回那个值,如果没有就返回默认值,方法的形参中可以添加值类型参数作为默认值。
C#中空值与空值或没有值相等,空值小于其他任何值。
C#2为可空类型提供的语法糖
在声明值类型时,使用?修饰符,例如:int? i; 这种方法实际是对值类型进行装箱的简化操作。
可空类型接受任何类型的隐式转换,但是可空类型必须显示转换为其他类型,并且转换为掐他类型时不能为空。
C#中的??操作符可以看作是判断空值的三元运算的简化版本。例如:
int? a = 4;
int b = 3;
int c = a ?? b;a为空时,c等于b;a不为空时,c等于a。其中a必须为可空类型否则就没有什么意义,如果c为值类型,那么a必须有值或者b必须为值类型。
??操作符还可以连用,例如:
int? a = 3;
int? b = 2;
int c = 3;
int d = a ?? b ?? c;整个语句的执行机制与上面的相同,不过是先从右边开始的,即先开始判断b和c(ps:刚开始接触觉得特别反人类,因为其他操作符都是从左边先开始的)。
总结:要给值类型变量赋空值,就在声明时的修饰符后添加?,使用??可以起到一个排序的效果。
边栏推荐
- 什么是 Kubernetes 自定义资源定义 (CRD)?
- 建议收藏丨sql行转列的一千种写法!!
- Using xgboost with tidymodels
- R 语言 用黎曼和求近似 积分
- 重磅 | 开放原子校源行活动正式启动
- Spark高效数据分析01、idea开发环境搭建
- DNS协议、ICMP协议、NAT技术
- 使用 RTCGA 临床数据进行生存分析
- Pyqt5 rapid development and practice 6.6 qformlayout & 6.7 nested layout & 6.8 qsplitter
- How to synchronize when the primary and sub warehouses are modified?
猜你喜欢

【图像处理】基于中轴变换实现图像骨架提取附matlab代码

Kunlun storage vs PostgreSQL OLTP test

How can agile development reduce cognitive bias in collaboration| Agile way

阿里P8爆出的这份大厂面试指南,看完工资暴涨30k!

The heavyweight foundation awarded platinum, gold and silver donors

牛客网刷题

LeetCode二叉树系列——144.二叉树的前序遍历
小笑授权系统V5.0开心版

If distributed file storage is realized according to integrated Minio

DNS协议、ICMP协议、NAT技术
随机推荐
Open source, compliance escort! 2022 open atom global open source summit open source compliance sub forum is about to open
一文搞懂什么是二叉树(二叉树的种类、遍历方式、定义)
DOD and Dor, two artifacts to reduce "cognitive bias"
The heavy | open atomic school source activity was officially launched
Error: Protobuf syntax version should be first thing in file
多线程顺序运行的 4 种方法,面试随便问!
Watch the open source summit first | quick view of the sub Forum & Activity agenda on July 29
GBase8s核心数据备份
8.穿插-从架构设计到实践理解ThreadPoolExecutor线程池
聊聊性能测试环境搭建
会议OA项目(五)---- 会议通知、反馈详情
Survival analysis using rtcga clinical data
美团、饿了么被杭州市监约谈要求落实食品安全管理责任 严禁恶意竞争
Learning R language these ebooks are enough!
Using Riemann sum to calculate approximate integral in R language
3.认识和操作一下mysql的基本命令
一键搭建博客:如何使用WordPress插件搭建专属博客
Kunlun storage vs PostgreSQL OLTP test
判断两个对象的值是否都相等
LeetCode_416_分割等和子集